c ++中"this"的类型?

Ada*_*gyi 32 c++

struct Foo
{
 void f()
 {
 // (*)
 }
};
Run Code Online (Sandbox Code Playgroud)

标有(*)的行中"this"的类型是什么?

const Foo*还是Foo*

For*_*veR 70

n3376 9.3.2/1

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

类X的成员函数中的类型是X*.如果成员函数声明为const,则其类型为const X*,如果成员函数声明为volatile,则其类型为volatile X*,如果成员函数声明为const volatile,则此类型为const挥发性X*.

  • @TomKnapen`his`是一个r值,所以无论如何你都无法修改它.对于大多数意图和目的,它表现为"X*const".但是你不能拿它的地址,例如. (17认同)
  • @TomKnapen:不.事后来看,它应该是一个引用,而不是一个指针.但是`this`早于引用,并且不破坏现有代码的C++传统真的很老. (3认同)
  • 这让我想知道他们为什么不把这个'这个'作为常量指针......有什么特别的原因吗? (2认同)

Kaz*_*Kaz 5

里面f,this有类型Foo *因为f不是const成员函数而.

你不能打电话 f一个const Foo对象.以下是错误的:

 const Foo obj;
 obj.f();
Run Code Online (Sandbox Code Playgroud)

这正是因为在内部Foo::f,this指针Foo *而不是const Foo *,因此函数调用需要一个丢弃限定符的指针转换.

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

this指针没有很大的不同&obj.