完全限定的静态成员变量中的歧义
Ambiguity in a fully qualified static member variable
在这个示例代码中,有两个句子显示同一个静态变量。第一个没有歧义,第二个有,为什么?
#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;
这显然是 GCC 中的错误, 建议您报告它。然而,在它被修复之前,您可以使用这样一个令人讨厌的解决方法:
std::cout << static_cast<B &>(v).A::a;
这样做的好处是,如果在(复杂的)场景中存在同名变量的基数 类。
,这将有助于消除歧义。
在这个示例代码中,有两个句子显示同一个静态变量。第一个没有歧义,第二个有,为什么?
#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;
这显然是 GCC 中的错误,
std::cout << static_cast<B &>(v).A::a;
这样做的好处是,如果在(复杂的)场景中存在同名变量的基数 类。
,这将有助于消除歧义。