类成员访问:第 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_成员内部类的定义
阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第2节 反射_10_反射_Class对象功能_获取Method成员方法