C/C++黑魔法-隐含的this指针
从一个编译错误去理解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指针相关推荐
- c++中基类与派生类中隐含的this指针的分析
先不要看结果,看一下你是否真正了解了this指针? 1 #include<iostream> 2 using namespace std; 3 4 class Parent{ 5 publ ...
- C++:随笔5---this指针和类的继承
this指针:(通过一个典型的例子来认识他) class Human {char fishc;Human(char fishc);//构造函数}; Human::Human(char fishc)// ...
- 一文带你入门C++,类与对象、6个默认成员函数、this指针以及static关键字。
C++98关键字:63个 一.命名空间规则(namespace) 1.命名空间可以解决函数.全局变量名重复的问题,包在不同的命名空间里的重复函数,实际就是两个完全无关的函数. 2.命名空间允许续嵌套: ...
- C++类和对象的使用之对象指针
类和对象的使用之对象指针 对象指针的一般概念 对象指针:指向类的成员的指针.在C++中,可以说明指向类的数据成员和成员函数的指针. 对象指针遵循一般变量指针的各种规则:类名 *对象指针名: 对象指针名 ...
- C++读书笔记之this指针的用法
C++ this指针的用法 this指针的含义及其用法: 1. this指针是一个隐含于每一个成员函数中的特殊指针. 它指向正在被该成员函数操作的那个对象. 2. 当对一个对象调用成员函数 ...
- C++:默认成员函数和this指针
类的六个默认成员函数 在学习这些默认的成员函数之前,务必先来了解一下this指针,因为除了构造函数外其他的默认成员函数都有一个隐式的形参–this指针.这对于我们之后在默认成员函数的学习和使用方面有着 ...
- C++ - this指针用法
目录 一.this指针是什么. 二.this指针的特性 一.this指针是什么. class Date { public:Date(int year=1,int month =1,int day=1) ...
- 木老师教笨笨课堂——系列讲座(从函数指针到委托) 三、C++语言里的函数指针...
先来回顾一下,我们说函数指针有一个重要的特性,它可以指向任何形参相同的函数.这样可以用统一的方式去调用不同的函数.(这个我还是希望笨笨同学好好思考一下,我想也是程序思想的精髓之一吧),就好比武功秘籍中 ...
- 详解函数指针和类成员函数指针
作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...
最新文章
- 汽车新零售转型之路怎么走?你需要知道这些
- 拓扑排序(Topological Sorting)
- 程序员 面试笔记 C++ 程序设计的基础 第10章
- mybatis基础学习3---特殊sql语句(备忘)
- 利用vSAN Performance Monitor可视化监控vSAN性能指标
- 斯诺登NFT作品拍得者PleasrDAO将继续收藏NFT艺术品
- LeetCode(728)——自除数(JavaScript)
- 隔行变色( 表格隔行变色 + LI 浮动隔行变色 )
- 树莓派python蓝牙_怎样通过蓝牙仅使用Android手机为树莓派配置Wi-Fi网络
- 基于Redis实现Spring Cloud Gateway的动态管理
- plsql 快捷键 设置 字母大小写
- 那个英雄辈出的年代——《资治通鉴》等历史札记有感2000字
- python 实现多线程下载m3u8格式视频,使用FFmpeg合并(升级修订自s_kangkang_A)
- vscode自定义消息配置
- 数据库子查询 含义-分类-语句
- cv2.warpAffine
- 虚拟机中安装linux系统步骤
- 如果爱情可以这么美好,今生一定无悔!
- 如何通过名字判断一个印度人的种姓
- vb+flash 开发常见问题之--保存时出现错误:“系统错误H80004005(-2147467259),未指定的错误”
热门文章
- cmd、命令大全、DOS命令、使用方法(超全),是我喜欢的文章
- mysql 嵌套_MySQL嵌套查询(子查询)
- cf 、B. Fridge Lockers(思维 + 贪心)
- 会声会影如何新建html项目,会声会影如何使用即时项目模板
- 国内android开发之墙痛,Android面试题-机型适配之痛,例如三星、小米、华为、魅族等。...
- 小程序跳转无反应解决方法
- 安装burp2022 --illegal-access=permit
- echarts 雷达图
- 三菱伺服调试软件MR-j2-CT
- Kafka配置动态SASL_SCRAM认证