通过 const 引用传递一个对象意味着我们不能修改它的任何成员。但是假设对象包含一个 vector<string>
成员。我们如何编写 const 方法来读取 vector<string>
的内容?成员假设 vector<string>::iterator
还需要成员并且必须在每次读取后更新以指向 vector 中的下一个元素?
这可能吗,或者在这种情况下还有其他方法吗?也就是说,不要修改由 const 引用对象传递的内容,但该对象应该能够更新其内部状态(即要读取的 vector 中的下一个元素)。
最佳答案
听起来您正在寻找关键字mutable
。可变成员变量在 const
成员方法中是可修改的。你可以阅读它here .一个例子:
class A
{
std::vector< int > v_;
mutable std::vector< int >::const_iterator current_;
public:
int get() const // note the const
{
assert( !v_.empty() );
if( current_ == v_.end() ) current_ = v_.begin();
return *current_++;
}
};
请注意,您仍然需要 const_iterator
,因为 vector 本身是 const,因此 v_.begin()
不会为您提供普通的迭代器。您可以通过将 vector 本身也标记为可变
来解决这个问题,然后您可以使用迭代器
。
这是一个完整的 live example .
关于c++ - 如何修改/更新由 const 引用传递的对象的内部状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432234/