首先,const对象只能调用const成员函数是因为const函数不会改变成员对象,这点和const对象的本意是相同的,其他函数有可能会改变成员变量,所以编译器拒绝通过调用非const函数
这里的转换是说,我另建立了一个指针,而不是原来的东西,简单的来说就是一个copy,去掉了const属性(当然真实情况下并不是真正的copy)
我觉得这里用C风格的转换,并不是很合适。如果换个风格可能更有助于你的理解
void test2()const
{
foo *temp = const_cast(this);
temp->test1();
}
也就是说,转换成了一个非const的成员,C的转换权限太大,直接就把所有的东西都转换了..这里其实只转换了const属性,const_cast的功能在这里就是:把常量指针被转化成非常量的指针,并且仍然指向原来的对象。
你所说的那个转换是将指针指向当前类,这样在静态函数中就可以调用当前类的成员函数了。
foo *temp = (foo*) this是将这个对象本身的内存地址赋给对象temp,*是取地址的意思。
还有const函数不可以调用非const函数,一定要通过对象才行。
我知道了,谢谢提问者