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;
}
Run Code Online (Sandbox Code Playgroud)
5.3.3说:
操作数是一个表达式,它是一个未评估的操作数(第5章),或带括号的type-id.的
sizeof操作者不得应用于具有功能或不完整的类型的表达式...
sizeof this->sz 有相同的结果.
this->在这种情况下被视为无操作,它基本上相当于sizeof(sz)?
this->在这种情况下被视为无操作,它基本上相当于sizeof(sz)?
那就对了.
this->szis 的类型,是std::size_t该上下文中的完整类型.
该类型*this是不完全在这里,但你引用的通道,说明为什么这不要紧,我们可以直接通过去分析sz具体.
因此this->,无论是好是坏,对表达的语义都没有实际影响.
正如谢尔盖所说,有一种情况是使用this->成员访问会产生影响(模板基础!),而这不是其中之一.