在C ++ 5.1.1 / 3 [expr.prim.general]中,它表示:
[of
this
]的类型和值类别在静态成员函数中定义。
这是什么意思?有什么关系?
注意:
this
不得出现在静态成员函数的声明中
在C ++ 5.1.1 / 3 [expr.prim.general]中,它表示:
[of
this
]的类型和值类别在静态成员函数中定义。
这是什么意思?有什么关系?
注意:
this
不得出现在静态成员函数的声明中
Answers:
该标准中的语言可以追溯到n3282,它是缺陷1207和1017的解决方案。特别地,该语言出现在缺陷1207的拟议决议中,因此应在解决缺陷时所遵循的标准的上下文中加以考虑。当时,有人担心使用*this
(9.3.1p3)将id表达式重写为成员访问表达式,尤其是在尾随返回类型声明的情况下(请参见问题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])中使用类的成员
X
在一个上下文中,其中this
可以使用(5.1.1 [expr.prim.general]) ,如果名称查找(3.4 [basic.lookup])解析名称[...]
显然,对缺陷1207的建议解决方案认为,静态成员函数中的(静态成员)id表达式需要转换为*this
成员访问表达式,因此需要访问的类型和值类别this
。到编写n3282时,已经解决了该问题,转而使用了qualified-id转换(又是9.3.1p3),该转换不需要this
,但是5.1.1p3中的语言仍然保留下来。
我建议在C ++标准讨论新闻组中提出这个问题。可能会删除编辑上的残留语言。