类的这样一个表达式
class myClass
{
void foo () const;
}
如果实现是这个样子
void foo() const
{
foo_also();
}
也就是调用一个方法,那么这个被调用的方法也得是const,不然VC就报错。
这个问题的产生在于,对于类的每个成员函数来说,都隐含一个this指针形参。在普通的非const成员函数中,this是一个指向类类型的const指针,可以改变this所指向的值,但不能改变this所保存的值。在const成员函数中,this的类型是一个指向const类类型对象的const指针。既不能改变this所指向的对象,也不能改变this所保存的地址。
因此,我们上面的foo()就是含有一个const myClass* const this;
但是,foo_also()却是一个普通的函数,也就是编译器会查到该方法中的形参是 const myClass* this; 不能保证this保存的值指针不被改变,因此就会报错。