76

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

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

这是什么意思?它是如何相关的?

注意:

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

4

1 回答 1

78

标准中的语言可以追溯到n3282,这是针对缺陷12071017的解决方案。特别是,该语言出现在针对缺陷 1207 的提议解决方案中,因此应在解决该缺陷时的标准上下文中进行考虑。当时有人担心使用*this(9.3.1p3) 将 id 表达式重写为成员访问表达式,特别是在尾随返回类型声明的上下文中(参见 issue 945)。

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

缺陷 1207:

当 id 表达式 (5.1 [expr.prim]) 不是类成员访问语法 (5.2.5 [expr.ref]) 的一部分并且不用于形成指向成员 (5.3.1 [expr.unary) 的指针时.op]) 用于声明类的成员函数X,如果名称查找 (3.4 [basic.lookup]) 解析名称...

n3282 和 C++11:

当 id 表达式 (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 时,这已经解决,有利于不需要this.

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

于 2013-05-13T14:57:15.787 回答