这个尺寸是怎么计算的

How is this size computed?

本文关键字:计算      更新时间:2023-10-16

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条),或带括号的类型idsizeof操作员应不能应用于具有函数或不完整的表达式类型

CCD_ 5具有相同的结果。

在这种情况下,this->是否被视为无操作,并且它本质上等同于sizeof(sz)

在这种情况下,this->是否被视为无运算,并且它本质上等同于sizeof(sz)

没错

this->sz的类型是std::size_t,在该上下文中是一个完整的类型。

*this的类型在这里是而不是完整的,但你引用了一段话,说明了为什么这无关紧要,我们可以直接分析sz

因此,this->对表达式的语义没有实际影响,无论是好是坏。

正如Sergey所说,有一种情况下,使用this->进行成员访问会有所不同(模板基础!),但这不是其中之一。