jjzjj

c++ - 在 C++ 中 : Is const reference means "read-only view of" or it requires immutability of object being referenced?

coder 2024-02-11 原文

问题可以通过示例表述如下:这段代码有效吗?

int a = 1;
const int& ca = a;
++a; //< Q: Is this valid?
cout << "a: " << a << endl;
cout << "ca: " << ca << endl; // Q: Is it guaranteed to output "2"? Is it valid at all?

对于 MSVC 和 MinGW,上面的代码片段按预期工作:如果我查询 ca 后记,它返回 2(即它被非常量引用更改)。但问题是:如何从标准的角度考虑这种情况?我们是否可以更改对象,我们有 const 引用(或者例如,我们必须将 ca 定义为 const volatile 引用以使代码片段正确)?

所以,如果上面的片段是正确的,那么这意味着,const 引用并不能保证引用的对象是常量。它只是禁止我们通过给定的引用来更改它,即建立引用对象的“只读” View 。这是正确的吗?

编辑:
感谢所有回答我问题的人。答案说明了事情,这对我来说似乎很自然。但是我真的很感激有人引用了 c++ 标准中的特定条款。

编辑2:
扩展了原始示例以使问题的思路更加清晰。

编辑3
另一个例子,最初出现在我对 Mats Peterson 的回答的评论中。

class MyClass {
public:
    // ...
    const X& getX() const;
    void modifyX();
private:
    X m_x;
};

void someFun() {
    //...
    MyClass myObj = ... // non-cons
    const X& x = myObj.getX();
    // ...
    myObj.modifyX(); // Q: is `x` guaranteed to track value of x stored in myObj here?
}

问题是:是否允许编译器在优化期间删除 x 变量的更新,因为它被声明为 const?例如。如果类型 Xbool,则按值存储 x 比按引用存储提供更好的性能和更少的内存消耗。

换句话说:如果后续调用 myObj 的方法,是否保证局部变量 x 将跟踪 myObj 中相应内部值的变化 修改那个内部值?

最佳答案

这是有效代码,因为a 不是constconst 引用意味着您不能通过引用修改引用对象。

关于c++ - 在 C++ 中 : Is const reference means "read-only view of" or it requires immutability of object being referenced?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22436856/

有关c++ - 在 C++ 中 : Is const reference means "read-only view of" or it requires immutability of object being referenced?的更多相关文章

随机推荐