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)
吗?
答案 0 :(得分:9)
在这种情况下,
this->
被视为无操作,它基本上等同于sizeof(sz)
吗?
这是对的。
this->sz
的类型为std::size_t
,是该上下文中的完整类型。
*this
的类型不在此处完成,但您引用了段落,说明为什么无关紧要,我们可以直接分析sz
。
因此,this->
对表达式的语义没有实际影响,无论是好是坏。
正如谢尔盖所说,有一种情况是使用this->
进行成员访问会产生影响(模板基础!),而这不是其中之一。