静态成员函数中`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 ++标准讨论新闻组上提出这个问题; 有可能将残差语言编辑删除。