const 正确性:如何在保持函数 const 的同时从迭代器字段获取元素?

const correctness: how to get element from an iterator field while keeping the function const?

我正在实施 class Foo,其中有一个名为 m_iterconst_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;