const 正确性:如何在保持函数 const 的同时从迭代器字段获取元素?
const correctness: how to get element from an iterator field while keeping the function const?
我正在实施 class 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 *'
我的意图是 return 指向 Bar 的指针而不改变对象的任何内部状态(即 m_iter
)。
我该怎么做?
将您的 const_iterator
更改为 iterator
。即使你的 Foo
class 没有直接修改迭代器指向的 Bar
对象,它仍然需要有 权限 才能修改如果它想将该权利授予其他人。这就是它试图通过 returning 一个非常量指针来做的事情。
当然,除非您无意授予对 Bar
对象的修改访问权限。在这种情况下,将函数的 return 类型更改为 const Bar*
.
我建议提供两个函数,const
版本和非 const
版本。
Bar* GetBar();
Bar const* GetBar() const;
我正在实施 class 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 *'
我的意图是 return 指向 Bar 的指针而不改变对象的任何内部状态(即 m_iter
)。
我该怎么做?
将您的 const_iterator
更改为 iterator
。即使你的 Foo
class 没有直接修改迭代器指向的 Bar
对象,它仍然需要有 权限 才能修改如果它想将该权利授予其他人。这就是它试图通过 returning 一个非常量指针来做的事情。
当然,除非您无意授予对 Bar
对象的修改访问权限。在这种情况下,将函数的 return 类型更改为 const Bar*
.
我建议提供两个函数,const
版本和非 const
版本。
Bar* GetBar();
Bar const* GetBar() const;