【发布时间】:2015-03-15 23:44:06
【问题描述】:
我正在实现一个类Foo,它有一个名为m_iter 的const_iterator。我要实现
Bar* GetBar() const;
简单的
return &(*m_iter);
但是,它会触发错误
cannot initialize return object of type 'Bar *' with an rvalue of type 'const Bar *'
我的意图是返回一个指向 Bar 的指针而不改变对象的任何内部状态(即m_iter)。
我该怎么做?
【问题讨论】:
-
如果你创建函数
const Bar* GetBar() const你应该没问题。从内部返回指向可变对象的指针基本上意味着您不再是 const。考虑一下如果发生了什么事GetBar()->SomeMutationOnBar(); -
@Charlie 如果我只想确保
Foo的成员(即m_iter)是不可变的并允许Bar的用户改变其内容怎么办? -
我认为如果你放松一下,你很快就会做出令人惊讶的行为。特别是如果您进入多线程代码。如果你想返回一个非常量指针,不要创建
const方法。从长期可维护性的角度来看,这仍然是一个有点危险的设计,并且可能指向设计缺陷,尽管仅用一行代码很难说。
标签: c++ const-correctness