struct A {
  int &r;
  A (int &i) : r(i) {}
  void foo () const {
    r = 5;  // <--- ok
  }
};


编译器不会在r = 5;处生成任何错误。
这是否意味着&r已经是常量正确的引用(与int* const逻辑等效)? [这里是一个related问题。]

最佳答案

我不确定“已经常量正确”是什么意思,但是:

分配给r等同于分配给传递到A构造函数的所有内容。执行此操作时,您无需在A实例中进行任何修改,因此将foo声明为const的事实并不构成障碍。就像您已完成此操作一样:

struct A {
  int * r;
  A (int * i) : r(i) {}
  void foo () const { *r = 5; }
}


foo是const的事实意味着它不会在调用的A实例中对其进行任何修改。这与修改它提供的其他数据之间没有冲突。

当然,如果碰巧安排r引用A的某些成员,则调用foo毕竟会修改A的实例。编译器无法捕获可能违反成员函数const的所有可能方式。当声明成员函数const时,您保证它不会参与任何此类替代。

关于c++ - 类成员引用变量是否具有内置的“const-correctness”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10315583/

10-11 22:25
查看更多