静态成员函数中`this`的types?
在C ++ 5.1.1 / 3 [expr.prim.general]中说:
types和值类别[在
this
]在静态成员函数中定义。
这是什么意思? 它是如何相关的?
注意:
this
不应该出现在静态成员函数的声明中
标准中的语言可以追溯到n3282 ,这是缺陷1207和1017的分辨率。 特别是,该语言出现在提出的缺陷1207的决议中,因此应该在标准的背景下考虑到缺陷得到解决的时候。 当时有人担心使用*this
(9.3.1p3)将idexpression式重写为成员访问expression式,特别是在trailing-return-type声明的上下文中(见问题945 )。
如果我们将提议的解决scheme与缺陷1207中的最终语言与标准中的最终语言进行比较,则与9.3.1p3有一个显着差异:
缺陷1207:
当不是类成员访问语法(5.2.5 [expr.ref])的一部分的idexpression式(5.1 [expr.prim])不用于形成指向成员的指针(5.3.1 [expr.unary如果名称查找(3.4 [basic.lookup])parsing名称,则在类
X
的成员函数的声明中使用 .op]。
n3282和C ++ 11:
当不是类成员访问语法(5.2.5 [expr.ref])的一部分的idexpression式(5.1 [expr.prim])不用于形成指向成员的指针(5.3.1 [expr.unary如果名称查找(3.4 [basic.lookup])parsing了名称[.. ] ,则在类
X
的成员中可以使用this
名称(5.1.1 [expr.prim.general]) 。 ]
显然,提出的缺陷1207的解决scheme带有这样的信念:静态成员函数中的idexpression式(对于静态成员)将需要被转换为*this
成员的访问expression式,因此将需要访问types和值类别this
。 在编写n3282的时候,已经解决了this
不需要this
的合格id转换(也是9.3.1p3),但是5.1.1p3中的语言仍然是有意义的。
我build议在C ++标准讨论新闻组上提出这个问题; 有可能将残差语言编辑删除。