const成员函数和const对象

从成员函数说起

在说const成员函数之前,先说一下普通成员函数,其实每个成员函数都有一个隐形的入参:T *const this。

1 int getValue(T *const this) 
2 {
3     return val;
4 }

const成员函数

声明形式是:int getValue() const;

编译器内部实现如下

1 int getValue(const T* const this) 
2 { 
3     return val; 
4 }

表示this指针指向的内容是不可改变的,所以当试图修改val时会编译报错。

const对象

当一个对象声明成const时,表示指向它的this指针也是const的了,变成const T *this。如果此时调用一个非const成员函数,如int getValue(),而不是int getValue() const,那么相当于把const T*this赋值给T *const this,当然会报错。所以这时候要添加一个const版本的int getValue() const,编译就能通过了。

1 T *this = const T *this;

当然普通非const对象调用const成员函数也是可行的,反之不行。

const成员函数调用非const成员韩函数也是不可行的,相当于把 const T*this赋值给T *this,也会编译报错。

原文地址:https://www.cnblogs.com/howo/p/8476236.html