前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++黑魔法-隐含的this指针

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

作者头像
Qt君
修改2019-07-16 15:43:51
3730
修改2019-07-16 15:43:51
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

编译错误的示例

代码语言:javascript
复制
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
复制
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 归档