当前位置: 首页 > news >正文

【c++】this指针学习与理解

this指针是 C++ 中一个核心但常被忽略的概念

“Inside every member function, the keyword this is a const pointer that holds the address of the current implicit object.”


🧩 一、member function(成员函数)与对象的关系

当你写一个类:

class Person {
public:int age;void sayHello() {std::cout << "Hello, my age is " << age << std::endl;}
};

然后在 main() 里这样写:

Person p1;
p1.age = 20;
p1.sayHello();

看起来你在调用一个函数,但实际上编译器会偷偷地把它改写成:

Person::sayHello(&p1);

也就是说,成员函数的本质其实是一个带有额外隐藏参数的普通函数,这个隐藏参数就是 this 指针。


🧠 二、this 是什么?

在每个非静态成员函数中,编译器都会自动为你加上一个参数:

void Person::sayHello(Person* const this)

也就是说,this 是一个指向当前对象的常量指针(pointer to the current object)。

  • 它的类型是:Person *const this
    (意味着 this 自身不能被改指向别的对象)
  • *this(它所指向的对象)可以修改。
    所以可以写 this->age = 30;

🧾 三、“const pointer”是什么意思?

“const pointer” 不是“指向常量的指针”,而是“指针本身是常量”。

对比:

类型含义
const int* p指向常量的指针(不能改值,但能改指向)
int* const p常量指针(能改值,但不能改指向)

this 属于第二种:ClassName* const this
你不能让 this 指向别的对象:

this = &anotherObject;  // ❌ 错误:this 是 const pointer

但你可以通过它修改当前对象的内容:

this->age = 30;         // ✅ OK

🧮 四、一个形象的例子

class Box {
public:int width;void setWidth(int w) {this->width = w;  // “this” 指向调用该函数的对象}
};

使用:

Box b1, b2;
b1.setWidth(10);   // => 编译器其实做了:setWidth(&b1, 10)
b2.setWidth(20);   // => setWidth(&b2, 20)

所以在第一次调用中:

  • this == &b1

  • 第二次调用中:

    • this == &b2

🧱 五、const 成员函数中的 this

如果函数被声明为 const,比如:

void print() const {std::cout << this->width << std::endl;
}

那此时 this 的类型变为:

const Box *const this

也就是说:

  • this 依然是个常量指针(不能改指向)
  • 但它指向一个常量对象(不能改成员)

因此,在 const 成员函数里,你不能写 this->width = 5;


✅ 总结

概念含义
this 是什么指向当前对象的隐藏指针
类型ClassName* const this
存在范围所有非静态成员函数中
用途访问当前对象的成员(this->member
const 成员函数中类型变为 const ClassName* const this

http://www.dtcms.com/a/526046.html

相关文章:

  • 【若依】若依框架中实现国际化多语言切换的步骤
  • 重庆城乡建设子网站一个完整的工程项目流程
  • 网站建设 安庆com网站怎么注册
  • C primer plus (第六版)第十一章 编程练习第16题
  • 上海制作网站的网站wordpress分享获得优惠
  • 客户做网站嫌贵了国内常用的crm系统
  • 最简单的网站建设wordpress多语种
  • 吉林省交通建设集团有限公司网站做网站的程序
  • 二手购物网站建设方案自媒体app下载
  • 做网站中心学校网页设计模板html代码免费
  • 淘客宝网站备案号如何弄四川建设招标网站首页
  • 使用ssrs矩阵
  • C++ 动态规划(Dynamic Programming)详解:从理论到实战
  • 网站推广软件免费版可tvseo排名第一
  • 盐城市建设工程网站电商直播培训
  • 福永网站推广大名专业做网站
  • 免费网页制作网站制作ppt的软件电脑版免费
  • 网站开发与网页后台开发最有效的线下推广方式
  • 偷的网站怎么做seo湖南省住建云公共信息服务平台
  • C++学习笔记——运算符重载
  • 怎样推广网站开什么店投资小利润高
  • 基于 Prometheus + Alertmanager + Grafana + Loki 的可视化监控与告警系统搭建实战
  • 如何做一款app需要多少钱网站seo收费
  • 电商网站设计公司皆选亿企邦怎么快速排名
  • MySQL使用技巧:字段内容的替换、拼接
  • 2025年数字趋势:重塑公共服务
  • 中企动力全网门户网站微信小程序是什么框架
  • 做企业网站公司游戏客户端开发
  • RPC攻击(Remote Procedure Call Attack)是什么?
  • 广西河池住房和城乡建设厅网站dedecms视频网站模板