在 C++ 5.1.1/3 [expr.prim.general] 中它说:
[of] 的类型和值类别
this
在静态成员函数中定义。
这是什么意思?它是如何相关的?
注意:
this
不得出现在静态成员函数的声明中
在 C++ 5.1.1/3 [expr.prim.general] 中它说:
[of] 的类型和值类别
this
在静态成员函数中定义。
这是什么意思?它是如何相关的?
注意:
this
不得出现在静态成员函数的声明中
标准中的语言可以追溯到n3282,这是针对缺陷1207和1017的解决方案。特别是,该语言出现在针对缺陷 1207 的提议解决方案中,因此应在解决该缺陷时的标准上下文中进行考虑。当时有人担心使用*this
(9.3.1p3) 将 id 表达式重写为成员访问表达式,特别是在尾随返回类型声明的上下文中(参见 issue 945)。
如果我们将提议的解决方案与缺陷 1207 与 n3282 和随后的标准中的最终语言进行比较,则与 9.3.1p3 有一个显着差异:
当 id 表达式 (5.1 [expr.prim]) 不是类成员访问语法 (5.2.5 [expr.ref]) 的一部分并且不用于形成指向成员 (5.3.1 [expr.unary) 的指针时.op]) 用于声明类的成员函数
X
,如果名称查找 (3.4 [basic.lookup]) 解析名称...
当 id 表达式 (5.1 [expr.prim]) 不是类成员访问语法 (5.2.5 [expr.ref]) 的一部分并且不用于形成指向成员 (5.3.1 [expr.unary) 的指针时.op])在可以使用的上下文中的类成员中使用 (5.1.1 [expr.prim.general])
X
this
,如果名称查找 (3.4 [basic.lookup]) 解析名称 [...]
很明显,针对缺陷 1207 的提议解决方案认为静态成员函数中的 id 表达式(到静态成员)需要转换为*this
成员访问表达式,因此需要访问 的类型和值类别this
。到编写 n3282 时,这已经解决,有利于不需要this
.
我建议在 C++ 标准讨论新闻组上提出这个问题;有可能在编辑上删除残留的语言。