标签:
effecticv C++第三条就说到,在设计类时要尽量使用const,当函数不会改变类的成员是,通常都会将该函数声明为const,但是const函数内部如何实现的呢?
首先我们应该从C++类的成员函数实现说起。
1 class temp 2 { 3 public: 4 void fun1(); 5 void fun2() const; 6 }
在类temp中,函数fun1()是非const的,函数fun2()是const类型的。
新建一个类的对象(非const) temp a;
a.fun1()在调用的时候,为了保证每个成员函数都能调用到它的对象,编译器会将对象a的地址传递给函数的隐式形参this,也就是a.fun1(&a)。每个成员函数都会有个隐式的参数this指针。
对象是非const类型的时候,我们即可以调用const类型的成员函数,可以调用非const类型的成员函数。
但是当新建一个类的对象(const型)const temp b;
a.fun1()在调动时,一个const temp*传递给隐式形参this,然后this的类型是常量指针,即temp* const,我们不能将一个指针常量赋值给常量指针,因此对于const类型的对象不能调用非const的成员变量。而const的型的成员变量,会在隐式形参this的前面加上const,也就是const temp* const this,它可以接受const temp*的参数。因此const类型的对象可以调用const类型的成员变量。
标签:
原文地址:http://www.cnblogs.com/liuteng/p/5927369.html