11

このサンプル コードには、同じ静的変数を示す 2 つの文があります。最初のものはあいまいさを与えませんが、2番目のものはあいまいさを与えます.なぜですか?

#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;

利点は、(複雑な) シナリオで、基本クラスの 1 つに同じ名前の変数がある場合に、曖昧さをなくすのに役立つことです。

于 2016-05-25T19:08:47.357 に答える