对于类X的非const成员函数,此指针的类型为X*const.
然后,成员函数的这个指针总是const.
然后,我们总是需要const cast,如:
void foo::p() {
const_cast <int&> (member) = 1;
}
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
对于类X的非const成员函数,此指针的类型为X*const.
不,this非const成员函数内的指针类型只是X*(它是一个rvalue).但是,即使this是X* const,也仍然不会阻止您更改数据成员.
您的代码示例与您的问题不符.它显示了一个const成员函数.在const成员函数内部,类型this为const X*.您不能更改const成员函数内的任何数据成员(声明为的数据成员除外mutable).声明成员函数就const好像您的目标是更改数据成员一样矛盾.下定决心.