C++这个指针总是const

5 c++ const

对于类X的非const成员函数,此指针的类型为X*const.

然后,成员函数的这个指针总是const.

然后,我们总是需要const cast,如:

void foo::p() {                        
      const_cast <int&> (member) = 1;    
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

fre*_*low 8

对于类X的非const成员函数,此指针的类型为X*const.

不,this非const成员函数内的指针类型只是X*(它是一个rvalue).但是,即使thisX* const,也仍然不会阻止您更改数据成员.

您的代码示例与您的问题不符.它显示了一个const成员函数.在const成员函数内部,类型thisconst X*.您不能更改const成员函数内的任何数据成员(声明为的数据成员除外mutable).声明成员函数就const好像您的目标是更改数据成员一样矛盾.下定决心.

  • 您可能对术语右值的含义感到困惑。`this` 是一个右值,仅仅意味着你不能获取 `this` 的地址。也就是说,你不能写`&amp;this`。作为右值与赋值的右侧无关(您可能就是这么想的;99% 的 C++ 文本都完全错误)。 (2认同)