C++,const对象的成员不可修改,但const对象通过指针维护的对象却可以修改,什么意思?望高手予以指点!

2024-11-18 09:11:01
推荐回答(4个)
回答1:

  1. 首先,const对象只能调用const成员函数是因为const函数不会改变成员对象,这点和const对象的本意是相同的,其他函数有可能会改变成员变量,所以编译器拒绝通过调用非const函数

  2. 这里的转换是说,我另建立了一个指针,而不是原来的东西,简单的来说就是一个copy,去掉了const属性(当然真实情况下并不是真正的copy)

  3. 我觉得这里用C风格的转换,并不是很合适。如果换个风格可能更有助于你的理解

void test2()const
{
foo *temp = const_cast(this);
temp->test1();
}

也就是说,转换成了一个非const的成员,C的转换权限太大,直接就把所有的东西都转换了..这里其实只转换了const属性,const_cast的功能在这里就是:把常量指针被转化成非常量的指针,并且仍然指向原来的对象。

回答2:

你所说的那个转换是将指针指向当前类,这样在静态函数中就可以调用当前类的成员函数了。

回答3:

foo *temp = (foo*) this是将这个对象本身的内存地址赋给对象temp,*是取地址的意思。
还有const函数不可以调用非const函数,一定要通过对象才行。

回答4:

我知道了,谢谢提问者