这个大小是如何计算的?

时间:2016-05-17 14:09:11

标签: c++

5.1.1 / 2表示:

  

关键字this命名指向a的对象的指针   调用非静态成员函数(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)吗?

1 个答案:

答案 0 :(得分:9)

  

在这种情况下,this->被视为无操作,它基本上等同于sizeof(sz)吗?

这是对的。

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

*this的类型在此处完成,但您引用了段落,说明为什么无关紧要,我们可以直接分析sz

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

正如谢尔盖所​​说,有一种情况是使用this->进行成员访问会产生影响(模板基础!),而这不是其中之一。