C++ 中的"this"类型?

Type of "this" in c++?

本文关键字:类型 this C++ 中的      更新时间:2023-10-16
struct Foo
{
 void f()
 {
 // (*)
 }
};

标有(*(的行中的"这个"是什么类型?

常量 Foo* 还是 Foo*

n3376 9.3.2/1

在非静态 (9.3( 成员函数的主体中,关键字 this 是一个 prvalue 表达式,其值是为其调用函数的对象的地址。

成员函数中的此类型为类 X 是 X*。如果成员函数被声明为 const,则其类型为 const X*,如果成员函数被声明为易失性,其类型是易失性 X*,如果声明成员函数常量易失性,其类型是常量易失性 X*。

f内部,this具有类型 Foo *,因为f不是const成员函数。

不能对const Foo对象调用f。以下错误:

 const Foo obj;
 obj.f();

这是因为在Foo::f内部,this指针是Foo *而不是const Foo *,所以函数调用需要指针转换,丢弃限定符。

this指针本身不是变量。它不可分配,但不是因为const限定符。在范围内没有声明,例如 Foo *const this 。作为语言的规则,this表达式根本不是左值。

this指针与&obj没有太大区别。

类型取决于成员函数。

例如,对于类 X,如果成员函数是

1( 常量,则这是常量 X* 的类型

2(挥发性,那么这就是挥发性X*等

否则为 X*

>this是指当前对象。c++中的this类型是Foo *const