首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C/C++黑魔法-隐含的this指针

C/C++黑魔法-隐含的this指针

作者头像
Qt君
修改于 2019-07-16 07:43:51
修改于 2019-07-16 07:43:51
40300
代码可运行
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程
运行总次数:0
代码可运行

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

编译错误的示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}
  • 编译后会出现以下错误:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
main.cpp:15: error: C2662:const int &Car::weight(void): 不能将“this”指针从“const Car”转换为“Car &

为什么会这样?

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

怎么做?

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

总结

  • constint&weight()const中,第一个 const修饰 weight返回值,第二个 const修饰 this指针;
  • 常量类只能访问使用 const修饰的函数。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验