Ayr*_*osa 1 c++ language-lawyer c++11
§9.3.1/ 3(重点是我的):
当一个id-expression(5.1)不属于类成员访问语法(5.2.5)并且不用于形成指向成员(5.3.1)的指针时,在上下文中的类X的成员中使用可以使用(5.1.1),如果名称查找(3.4)将id-expression中的名称解析为某个类C的非静态非类型成员,并且如果id-expression可能被评估或者 C是X或X的基类,id-expression被转换为类成员访问表达式(5.2.5),使用(*this)(9.3.2)作为左侧的后缀表达式.运营商.[注意:如果C不是X或X的基类,则类成员访问表达式格式错误. - 结束注释]同样在名称查找期间,当在类X的成员函数的定义中使用的非限定id(5.1)解析为静态成员,枚举器或类X的嵌套类型或X的基类时,unqualified-id被转换为qualified-id(5.1),其中nested-name-specifier命名成员函数的类.
上述说明不应该更具体吗?我的意思是这样的:`如果id-expression可能被评估,如果C不是X或X的基类,则类成员访问表达式是不正确的.
请注意,如果id-expression是未评估的操作数,即使C不是X,代码也是有效的,也不是X的基类,尽管在这种情况下,段落中提到的转换不会发生.
小智 6
这个注释有点含糊不清,但我认为它应该是关于前一句的最后一部分的注释,就像它被写成:
如果id-expression可能被评估,或者C是X或X的基类,那么:
- 将id-expression转换为类成员访问表达式(5.2.5),使用(*this)(9.3.2)作为后面的postfix-expression.运营商.[注意:如果C不是X或X的基类,则类成员访问表达式格式错误. - 结束说明]
当这样读时,注释完全正确.
无论如何,笔记不是规范性的,所以即使措辞留有余地,也没关系,因为它对任何C++程序或实现都没有任何影响:没有程序因为措辞而变得有效或无效本说明中没有任何实现符合或不符合本说明.在最坏的情况下,正如在这里发生的那样,理解标准变得更加困难,导致误解.
正如Columbo在评论中提到的那样,实现者的这种误解可能会导致不一致的实现,但这不是这里发生的事情.
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |