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/