从一个编译错误去理解this指针。

编译错误的示例

class Car {public:const int &weight(){return m_weight;}private:int m_weight;
};int main(int argc, char *argv[])
{const Car car;int weight = car.weight();return 0;
}
  • 编译后会出现以下错误:
main.cpp:15: error: C2662: “const int &Car::weight(void)”: 不能将“this”指针从“const Car”转换为“Car &”

为什么会这样?

  • 编译器里面const int &weight()const int &weight(Car *this)是等价的;
  • 因为Car类的weight函数虽然没有参数传入,但实际上编译器自动隐含的传入this指针;
  • 由于const Car car被申明为常量实例,导致car实例所引用的weight函数的this指针也需要为const修饰;

怎么做?

  • const int &weight()改为const int &weight() const即可。

总结

  • const int &weight() const中,第一个const修饰weight返回值,第二个const修饰this指针;
  • 常量类只能访问使用const修饰的函数。

C/C++黑魔法-隐含的this指针相关推荐

  1. c++中基类与派生类中隐含的this指针的分析

    先不要看结果,看一下你是否真正了解了this指针? 1 #include<iostream> 2 using namespace std; 3 4 class Parent{ 5 publ ...

  2. C++:随笔5---this指针和类的继承

    this指针:(通过一个典型的例子来认识他) class Human {char fishc;Human(char fishc);//构造函数}; Human::Human(char fishc)// ...

  3. 一文带你入门C++,类与对象、6个默认成员函数、this指针以及static关键字。

    C++98关键字:63个 一.命名空间规则(namespace) 1.命名空间可以解决函数.全局变量名重复的问题,包在不同的命名空间里的重复函数,实际就是两个完全无关的函数. 2.命名空间允许续嵌套: ...

  4. C++类和对象的使用之对象指针

    类和对象的使用之对象指针 对象指针的一般概念 对象指针:指向类的成员的指针.在C++中,可以说明指向类的数据成员和成员函数的指针. 对象指针遵循一般变量指针的各种规则:类名 *对象指针名: 对象指针名 ...

  5. C++读书笔记之this指针的用法

    C++ this指针的用法 this指针的含义及其用法: 1.  this指针是一个隐含于每一个成员函数中的特殊指针.     它指向正在被该成员函数操作的那个对象. 2.  当对一个对象调用成员函数 ...

  6. C++:默认成员函数和this指针

    类的六个默认成员函数 在学习这些默认的成员函数之前,务必先来了解一下this指针,因为除了构造函数外其他的默认成员函数都有一个隐式的形参–this指针.这对于我们之后在默认成员函数的学习和使用方面有着 ...

  7. C++ - this指针用法

    目录 一.this指针是什么. 二.this指针的特性 一.this指针是什么. class Date { public:Date(int year=1,int month =1,int day=1) ...

  8. 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...

    先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...

  9. 详解函数指针和类成员函数指针

    作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...

最新文章

  1. 汽车新零售转型之路怎么走?你需要知道这些
  2. 拓扑排序(Topological Sorting)
  3. 程序员 面试笔记 C++ 程序设计的基础 第10章
  4. mybatis基础学习3---特殊sql语句(备忘)
  5. 利用vSAN Performance Monitor可视化监控vSAN性能指标
  6. 斯诺登NFT作品拍得者PleasrDAO将继续收藏NFT艺术品
  7. LeetCode(728)——自除数(JavaScript)
  8. 隔行变色( 表格隔行变色 + LI 浮动隔行变色 )
  9. 树莓派python蓝牙_怎样通过蓝牙仅使用Android手机为树莓派配置Wi-Fi网络
  10. 基于Redis实现Spring Cloud Gateway的动态管理
  11. plsql 快捷键 设置 字母大小写
  12. 那个英雄辈出的年代——《资治通鉴》等历史札记有感2000字
  13. python 实现多线程下载m3u8格式视频,使用FFmpeg合并(升级修订自s_kangkang_A)
  14. vscode自定义消息配置
  15. 数据库子查询 含义-分类-语句
  16. cv2.warpAffine
  17. 虚拟机中安装linux系统步骤
  18. 如果爱情可以这么美好,今生一定无悔!
  19. 如何通过名字判断一个印度人的种姓
  20. vb+flash 开发常见问题之--保存时出现错误:“系统错误H80004005(-2147467259),未指定的错误”

热门文章

  1. cmd、命令大全、DOS命令、使用方法(超全),是我喜欢的文章
  2. mysql 嵌套_MySQL嵌套查询(子查询)
  3. cf 、B. Fridge Lockers(思维 + 贪心)
  4. 会声会影如何新建html项目,会声会影如何使用即时项目模板
  5. 国内android开发之墙痛,Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。...
  6. 小程序跳转无反应解决方法
  7. 安装burp2022 --illegal-access=permit
  8. echarts 雷达图
  9. 三菱伺服调试软件MR-j2-CT
  10. Kafka配置动态SASL_SCRAM认证