请参阅this page并转到示例。 这是关于
的使用的演示struct type {
type() :i(3) {}
void m1(int v) const {
// this->i = v; // compile error: this is a pointer to const
const_cast<type*>(this)->i = v; // OK as long as the type object isn't const
}
int i;
};
const 这里意味着m1无法修改类型的成员变量。我无法理解为什么const_cast会修改 this 的常量。我的意思是,这个指针指向当前类型对象,而不是i本身。
为什么不:
const_cast<int>((this)->i) = v;
我可以说当一个成员函数使用 const 限定符时,整个对象和所有成员变量都变为 const ?为什么这个是const指针?
答案 0 :(得分:5)
我无法理解为什么const_cast会修改此
的常量
没有。你可以说它创建了另一个临时指针,它不是指向const type
的指针,但包含与this
相同的地址。然后它使用该指针访问i
。
为什么不
const_cast<int>((this)->i)
您可以执行类似的操作,但需要转换为引用,而不是普通整数。
const_cast<int&>(i) = v; // this-> omitted for brevity
同样的警告适用于i
的任何修改,如果this
指向真正 const的对象。
我可以说当一个成员函数使用const修饰符时,整个对象和所有成员变量都变为const吗?为什么这是const指针?
是。成员函数上的const限定符意味着this
的指针类型为type const
。并且所有成员(不可变)也是通过this
进行访问的常量。