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

Posted

技术标签:

【中文标题】类成员访问:第 3.4.5 节,第 2 点:来自 N3290 草案 C++【英文标题】:Class member access : section 3.4.5, point 2: point from N3290 draft C++ 【发布时间】:2011-08-29 10:34:23 【问题描述】:

类成员访问:第 3.4.5 节,第 2 点:

如果类成员访问 (5.2.5) 中的 id 表达式是 unqualified-id,并且对象表达式的类型是一个类 type C, unqualified-id 在类 C 的范围内查找。 对于伪析构函数调用 (5.2.4),查看 unqualified-id 在完整的后缀表达式的上下文中。

在上面的语句中:对于伪析构函数调用 (5.2.4),在完整的后缀表达式的上下文中查找 unqualified-id。

任何人都可以用程序来解释这一点(我知道伪析构函数调用)吗?

【问题讨论】:

【参考方案1】:

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

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

如果这被“天真地”解析,那么解析器会看到以下标记:

unqualified-id(x), typename(I), ::, bitwise-negate, typename(I), (, ), ;.

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

~I();

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

【讨论】:

@user751747 不确定您的意思。只需将上面的代码放入 main 函数中,您就拥有了您的程序。

以上是关于类成员访问:第 3.4.5 节,第 2 点:来自 N3290 草案 C++的主要内容,如果未能解决你的问题,请参考以下文章

阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第7节 内部类_15_类作为成员变量类型

阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第7节 内部类_8_成员内部类的定义

第4.2章

82.标准库函数begin和end

阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_10_反射_Class对象功能_获取Method成员方法

塔 · 第 二 条 约 定