班级成员访问:第 3.4.5 节,第 2 点:来自 N3290 草案 C++ 的点
类成员访问:第 3.4.5 节第 2 点:
如果类成员访问 (5.2.5) 中的 id 表达式是 unqualified-id,并且对象表达式的类型属于类 类型 C,在类 C 的范围内查找 unqualified-id。 对于伪析构函数调用 (5.2.4),会查找 unqualified-id 在完整的后缀表达式的上下文中。
在上面的语句中:对于伪析构函数调用(5.2.4),在完整的后缀表达式的上下文中查找未限定的 id。
任何人都可以用程序来解释这一点(我知道伪析构函数调用)吗?
Class member access : section 3.4.5, point 2:
If the id-expression in a class member access (5.2.5) is an
unqualified-id, and the type of the object expression is of a class
type C, the unqualified-id is looked up in the scope of class C.
For a pseudo-destructor call (5.2.4),the unqualified-id is looked
up in the context of the complete postfix-expression.
here in the above statement : For a pseudo-destructor call (5.2.4),the unqualified-id is looked up in the context of the complete postfix-expression.
can any one explain this in terms of an program (i know about pseudo-destructor call)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
伪析构函数是在非类类型上调用的类似析构函数的语法:
如果“天真地”对其进行解析,则解析器将看到以下标记:
unqualified-id(
x
), typename (I
)、::
、按位求反、类型名(I
)、(
、) , <代码>;。
“按位求反”是一个问题,因为如果您只是这样写:
那么这将形成一个具有不同语义的有效表达式。即与
~0
相同。因此,必须以不同的方式解析上面的表达式以解释伪析构函数上下文。A pseudo-destructor is a destructor-like syntax invoked on a non-class type:
If this were parsed “naively”, then the parser would see the following tokens:
unqualified-id(
x
), typename(I
),::
, bitwise-negate, typename(I
),(
,)
,;
.The “bitwise-negate” is a problem because if you just wrote this:
Then this would form a valid expression with a different semantic. Namely, the same as
~0
. Therefore, the expression above has to be parsed differently to account for the pseudo-destructor context.