【问题标题】:Class member access : section 3.4.5, point 2: point from N3290 draft C++类成员访问:第 3.4.5 节,第 2 点:来自 N3290 草案 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。

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

【问题讨论】:

    标签: c++ c++11 class-members


    【解决方案1】:

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

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

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

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

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

    ~I();
    

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

    【讨论】:

    • @user751747 不确定您的意思。只需将上面的代码放入 main 函数中,您就拥有了您的程序。
    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多