struct Foo
{
void f()
{
// (*)
}
};
标有 (*) 的行中的“this”是什么类型?
是const Foo*还是Foo*?
n3376 9.3.2/1
在非静态 (9.3) 成员函数的主体中,关键字 this 是一个纯右值表达式,其值是调用该函数的对象的地址。
类 X 的成员函数中 this 的类型是 X*。如果成员函数声明为 const,则 this 的类型为 const X*,如果成员函数声明为 volatile,则 this 的类型为 volatile X*,如果成员函数声明为 const volatile,则 this 的类型为 const挥发性 X*。
在里面f
,this
有类型,Foo *
因为f
不是const
成员函数。
你不能调用f
一个const Foo
对象。以下是错误的:
const Foo obj;
obj.f();
这正是因为在内部Foo::f
,this
指针是Foo *
而不是const Foo *
,因此函数调用需要指针转换,从而丢弃限定符。
this
指针本身不是变量。它是不可分配的,但不是因为const
限定符。范围内没有声明,例如Foo *const this
. 作为语言的this
规则,表达式根本不是左值。
this
指针与&obj
.
this的类型取决于成员函数。
例如对于一个类 X,如果成员函数是
1) const, 那么这是 const X* 类型
2) volatile,那么这是 volatile X* 等
否则为 X*
this
指当前对象。this
c++ 中的类型是Foo *const
.