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,也会编译报错。
天行健,君子当自强不息
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步