C语言中,this指针在类成员函数中具体指向什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计947个文字,预计阅读时间需要4分钟。
指向调用该函数的对象的首个地址,不是类定义的位置,也不是栈上随意一个地址——即是 `obj.func()` 中的 `obj` 在内存中的起始位置。
注意:哪怕函数是 const 或 noexcept 修饰的,this 类型也会跟着变:const MyClass* 或 MyClass* noexcept 的 this 类型会不同,但值仍是对象地址。
-
this是隐式参数,不占函数签名,所以重载不能靠this的 const 性区分(得靠成员函数自身的const限定符) - 静态成员函数没有
this,写this->xxx直接编译报错:error: 'this' is unavailable for static member functions - 在构造函数体中,
this已有效,但此时对象尚未完全构造完毕;访问虚函数或未初始化成员可能引发未定义行为
为什么 this 不能被取地址或赋值?
因为 this 是右值(C++11 起明确为纯右值),本质是临时生成的指针常量,类似字面量 nullptr,不是变量。
本文共计947个文字,预计阅读时间需要4分钟。
指向调用该函数的对象的首个地址,不是类定义的位置,也不是栈上随意一个地址——即是 `obj.func()` 中的 `obj` 在内存中的起始位置。
注意:哪怕函数是 const 或 noexcept 修饰的,this 类型也会跟着变:const MyClass* 或 MyClass* noexcept 的 this 类型会不同,但值仍是对象地址。
-
this是隐式参数,不占函数签名,所以重载不能靠this的 const 性区分(得靠成员函数自身的const限定符) - 静态成员函数没有
this,写this->xxx直接编译报错:error: 'this' is unavailable for static member functions - 在构造函数体中,
this已有效,但此时对象尚未完全构造完毕;访问虚函数或未初始化成员可能引发未定义行为
为什么 this 不能被取地址或赋值?
因为 this 是右值(C++11 起明确为纯右值),本质是临时生成的指针常量,类似字面量 nullptr,不是变量。

