美文网首页
隐含的this指针

隐含的this指针

作者: 陈成_Adam | 来源:发表于2021-02-17 20:03 被阅读0次

编译错误的示例

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 &”

为什么会这样?

  • 编译器里面 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修饰的函数。

转载自:https://cloud.tencent.com/developer/article/1464343

相关文章

  • 隐含的this指针

    编译错误的示例 编译后会出现以下错误: 为什么会这样? 编译器里面 constint&weight()与 cons...

  • C++中的this指针

    1.this指针的作用是什么?this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向正在被该成员函数操...

  • 为什么const对象只能访问const成员函数

    const对象只能访问const成员函数 在一个对象调用其成员函数时,它隐含的一个形参this指针。例如,我们定义...

  • 第十九章: 波动率微笑

    隐含波动率与期权执行价格的函数被称为波动率微笑(volatility smile)。所谓隐含波动率,是指隐含在期权...

  • Jsp(二)

    JSP隐含对象 JSP支持九个自动定义的变量,江湖人称隐含对象。这九个隐含对象的简介见下表: |对象|描述||--...

  • ** 指针的指针

    指针的指针 什么是安全释放!!

  • 隐含假设

    有一些隐含假设,潜藏在人们的思想深处,具有很大的普遍性。如果能先把它找出来,可以让人预防人生困局的发生。 不要让孩...

  • 隐含作者?

    最近在看《西方叙事学:经典与后经典》这本书,里面提到隐含作者这个概念,隐含作者指的是创作过程中的作者,而不是日常生...

  • 隐含作者

    “隐含作者”是从叙述学借用的概念,指解释者从全文本中推导归纳出来的一套意义与价值。比如,当你走进一个售楼处,你从现...

  • python中类方法、类实例方法、静态方法的使用与区别

    实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls。静态方法无隐含参数,主要为了类实例也可以直接...

网友评论

      本文标题:隐含的this指针

      本文链接:https://www.haomeiwen.com/subject/fghwxltx.html