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'?你通过解决这个问题得到了它,但我不知道你为什么期望这个问题。 –