c++ - 如何修改/更新由 const 引用传递的对象的内部状态

标签 c++ vector pass-by-const-reference

通过 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/

相关文章:

C++:比较结构中的数据

C++ 无法创建 vector

C++ 和标准容器 : memory addresses of members

c++11 - 在 C++11 及更高版本中,常量引用仍然是最佳实践吗?

c++ - 在 Qt 中发送信号时的 const-ref

c++ - 将文字作为 const ref 参数传递

c++ - 找到字符串模式的更好解决方案?

c++ - 快速加倍查找斐波那契数,函数在 C++ 中不起作用

c++ - Prewitt 滤波器、边缘检测

c++ - 关于 vector 的困惑