静态成员函数中的`this`类型?

And*_*zos 73 c++ language-lawyer c++11

在C++ 5.1.1/3 [expr.prim.general]中,它说:

类型和值类别[of this]在静态成员函数中定义.

这是什么意思?它有什么关系?

注意:

this 不应出现在静态成员函数的声明中

eca*_*mur 78

标准中的语言可以追溯到n3282,这是缺陷12071017的分辨率.尤其是语言出现在拟议的决议对缺陷1207,因而应在标准的范围内,因为它站在该缺陷被解决的时间来考虑.当时使用*this(9.3.1p3)将id表达式重写为成员访问表达式存在一些担忧,特别是在trailing-return-type声明的上下文中(参见问题945).

如果我们将提出的解决方案与缺陷1207与n3282中的最终语言以及随后的标准进行比较,则与9.3.1p3存在一个显着差异:

缺陷1207:

当一个id-expression(5.1 [expr.prim])不属于类成员访问语法(5.2.5 [expr.ref])而不用于形成指向成员的指针(5.3.1 [expr.unary] .op])用于声明类的成员函数X,如果名称查找(3.4 [basic.lookup])解析名称...

n3282和C++ 11:

当一个id-expression(5.1 [expr.prim])不属于类成员访问语法(5.2.5 [expr.ref])而不用于形成指向成员的指针(5.3.1 [expr.unary] .op])用于可以使用的上下文中的类成员(5.1.1 [expr.prim.general])Xthis,如果名称查找(3.4 [basic.lookup])解析名称[...]

很明显,提出的缺陷1207的解决方案认为静态成员函数中的id表达式(对于静态成员)需要转换为*this成员访问表达式,因此需要访问类型和值类别this.到编写n3282时,已经解决了有利于不需要的限定id转换(也是9.3.1p3)this,但5.1.1p3中的语言仍然存在.

我建议在C++标准讨论新闻组中提出这个问题; 有可能在编辑上删除残留语言.