【发布时间】:2020-02-12 17:56:43
【问题描述】:
我知道 const 方法不能修改调用它的对象。看这段代码:
class A{
int a;
public:
void f(A & a_) const {
a_.a=5;
};
};
int main(){
A x;
x.f(x);
return 0;
}
为什么这段代码会编译?为什么在将方法声明为常量时,我什至可以分配对同一类的非 const 对象的引用?一般来说,编译器如何检查函数可以修改对象的所有可能情况?
【问题讨论】:
-
是什么让您认为它无法编译?
const适用于this,只要this没有被更改,就可以了。请注意,this和传入的a不被认为是相同的。 -
f()的参数可以是给定类型的任何对象。没有法律规定只能将this作为参数传递给它。 -
我想可能存在混叠违规。如果
f方法正在对a_.a进行操作,然后与它自己的a成员进行比较。
标签: c++