iam*_*ind 0 c++ reference const-correctness class-members
struct A {
int &r;
A (int &i) : r(i) {}
void foo () const {
r = 5; // <--- ok
}
};
Run Code Online (Sandbox Code Playgroud)
编译器不会在r = 5;.
这是否意味着作为参考(逻辑等效)&r已经是常量正确的int* const?[这是一个相关的问题。]
我不确定你所说的“已经是常量”是什么意思,但是:
分配给与r分配给传递给 的构造函数的任何事物相同A。在A执行此操作时,您不会在实例中修改任何内容,因此foo声明为 const的事实并不是障碍。就好像你这样做了:
struct A {
int * r;
A (int * i) : r(i) {}
void foo () const { *r = 5; }
}
Run Code Online (Sandbox Code Playgroud)
fooconst的事实意味着它不会修改A它被调用的实例中的任何内容。这与让它修改提供的其他数据之间没有冲突。
当然,如果你碰巧安排r成为对某个成员的引用,A那么调用毕竟foo会修改实例A。编译器无法捕获const可能违反成员函数的所有可能方式;当您声明一个成员函数时,const您承诺它不会进行任何此类诡计。
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |