为什么 C++11 中 const 成员函数可以修改对象的可变数据成员?

yxy*_*137 0 c++ mutable c++11

成员函数为什么以及如何const修改对象的mutable数据成员?

成员函数使用this指针来修改对象的数据成员。this成员函数的指针是const指向常量的指针,而不是普通的数据成员。那么为什么总是可以修改mutable对象标记的数据成员,编译器是如何实现的呢?

Joh*_*nck 7

成员变量的全部要点mutable是它们可以通过const实例进行修改。因此,这一事实与修改成员变量无关this——就像它与读取成员变量时无关一样。constmutable

  • @yxyc-137“_const 成员函数的 this 指针是指向常量的 const 指针_”:你从哪里得到这个?“const”指针不必指向常量对象:“int i;” const int* ptr = &i;`,“i”不是常量对象,但“ptr”是指向它的“const”指针。事实上,“可变”子对象永远不会是常量对象,即使父对象是常量对象。否则“可变”行为将不起作用。 (2认同)
  • @yxyc-137 不,常规成员函数的“this”指针不是 const 指针。许多 C++ 教科书错误地表达了你的意思(或者你说的是那些书上错误的内容)。正确的说法是非静态非常量成员函数的 this 指针是 Class*,而非静态 const 成员函数的 this 指针是 const X*。 (2认同)