是" I2 :: i"在多重继承中形成不良?

时间:2017-10-10 05:35:58

标签: c++ c++11 inheritance multiple-inheritance

我问了关于Multiple inheritance to avoid ambiguity by using scope resolution的问题。我的答案解释B::i格式正确。

但是,我在c ++ open-std找到了 文档,I2::i 格式错误

struct D2: I1, I2 {
        void f() {
            I2::i = 0;    // ill-formed per proposal
        }
    };

那么,我的answer是真的吗?

2 个答案:

答案 0 :(得分:4)

你没有正确阅读。请看下面的文字:

  

在我提出的措辞中,“this”的类不能转换为“B”(限定符被忽略),因此访问是不正确的。糟糕。

     

我认为以下是正确的表述,因此我们在悉尼讨论的提议决议应包含以下段落,而不是N1543中的段落:

     

如果E2是非静态数据成员或非静态成员函数,如果 E2 的命名类(11.2)无法明确转换(10.2)到该类,则该程序格式错误其中E2直接成员。

该示例显示了先前提出的措辞存在问题。这是一个专门给出的例子,因为它应该是有效的,以防止它被无效。

答案 1 :(得分:3)

链接的问题指出,特定提案会使引用的代码格式错误。它似乎在说这是一个论点,即该特定提案的确切形式存在缺陷,其目的是改进提案,使其不再破坏该代码。在提案N1626的最终版本中,此示例未显示。将N1626合并到C ++ 11标准似乎解决了这个问题(我不知道为什么它没有在该页面上标记为已解决)。所以不,引用的代码不会变得格格不入。