32
struct Foo
{
 void f()
 {
 // (*)
 }
};

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

const Foo*还是Foo*

4

4 回答 4

70

n3376 9.3.2/1

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

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

于 2013-06-17T11:35:11.587 回答
5

在里面fthis有类型,Foo *因为f不是const成员函数。

你不能调用f一个const Foo对象。以下是错误的:

 const Foo obj;
 obj.f();

这正是因为在内部Foo::fthis指针是Foo *而不是const Foo *,因此函数调用需要指针转换,从而丢弃限定符。

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

this指针与&obj.

于 2013-06-17T15:37:39.287 回答
3

this的类型取决于成员函数。

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

1) const, 那么是 const X* 类型

2) volatile,那么是 volatile X* 等

否则为 X*

于 2013-06-19T04:36:34.693 回答
-5

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

于 2013-06-17T11:53:56.467 回答