班级成员访问:第 3.4.5 节,第 2 点:来自 N3290 草案 C++ 的点

发布于 2024-12-01 15:58:04 字数 328 浏览 3 评论 0原文

类成员访问:第 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何以笙箫默 2024-12-08 15:58:04

伪析构函数是在非类类型上调用的类似析构函数的语法:

typedef int I;
I x;
x.I::~I();

如果“天真地”对其进行解析,则解析器将看到以下标记:

unqualified-id(x), typename (I)、::、按位求反、类型名(I)、() , <代码>;。

“按位求反”是一个问题,因为如果您只是这样写:

~I();

那么这将形成一个具有不同语义的有效表达式。即与~0相同。因此,必须以不同的方式解析上面的表达式以解释伪析构函数上下文。

A pseudo-destructor is a destructor-like syntax invoked on a non-class type:

typedef int I;
I x;
x.I::~I();

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:

~I();

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文