11

在此示例代码中,有两个句子显示了相同的静态变量。第一个没有歧义,但第二个没有,为什么?

#include <iostream>

using namespace std;

struct A { static const char a = 'a'; };
struct B : public A { };
struct C : public A { };
struct G : public B, public C { };

int main()
{
    G v;

    cout << G::B::A::a << endl;
    cout << v.B::A::a << endl;
}

GCC 错误(根据一些评论,clang 中没有歧义):

main.cpp:15:18: error: 'A' is an ambiguous base of 'G'
  cout << v.B::A::a << endl;

大肠杆菌代码

4

1 回答 1

5

这显然是 GCC 中的一个错误,因为GCC 维护人员建议您报告它。但是,在它修复之前,您可以使用如下讨厌的解决方法:

std::cout << static_cast<B &>(v).A::a;

优点是,如果在(复杂的)场景中,如果在一个基类中有同名的变量,这将有助于消除歧义。

于 2016-05-25T19:08:47.357 回答