const成员函数

Posted oscarwin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了const成员函数相关的知识,希望对你有一定的参考价值。

 

    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类型的成员变量。

 

以上是关于const成员函数的主要内容,如果未能解决你的问题,请参考以下文章

为啥 const 函数可以使用静态成员对象的非常量函数?

NO.3 尽量使用const

寻找成员函数的常数

在构造函数中反序列化 const 成员对象

成员函数

为啥即使对于“写入时复制”的 const 成员函数也返回代理类?