5.1.1/2规定:
关键字
this
表示指向调用非静态成员函数(9.3.2)或评估非静态数据成员的初始化程序(9.2)的对象的指针。
并且:
与其他上下文中的对象表达式不同,
*this
在类成员函数体外部进行类成员访问(5.2.5)时,不需要对其进行完整类型要求。
以下代码将打印8
:
#include <cstddef>
#include <iostream>
struct Test
{
std::size_t sz = sizeof(this->sz);
};
int main()
{
std::cout << Test{}.sz;
}
5.3.3中写道:
操作数可以是表达式,这是未求值操作数(第5条),或括号括起来的type-id。不得对具有函数类型或不完全类型的表达式应用
sizeof
运算符...在这种情况下,
sizeof this->sz
的结果相同。在这种情况下,
this->
是否被视为无操作,并且本质上等同于sizeof(sz)
?
this->
访问成员变量时,实际上很少有(只有一个)情况会产生差异,而这并不是其中之一。 - SergeyA(*this).sz
是一个完整的类型,对吗,std::size_t
?你通过解引用this
来得到它,但我不确定你为什么认为这很重要。 - Nathan Cooper