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*.
里面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.