是否可以与const成员建立匿名联盟?我有以下内容:
struct Bar {
union {
struct { const int x, y; };
const int xy[2];
};
Bar() : x(1), y(2) {}
};
使用G ++ 4.5,我收到错误:
error: uninitialized member ‘Bar::<anonymous union>::xy’ with ‘const’ type ‘const int [2]’
答案 0 :(得分:3)
这是GCC中的问题,已在4.6版中修复。您的代码现在可以正常运行。
它仍然依赖于GCC扩展,因为它使用匿名结构,但大多数编译器现在都支持它们。此外,以下代码现在可以使用-pedantic
正确构建:
struct Bar {
union {
const int x;
const int y;
};
Bar() : x(1) {}
};
Clang和Visual Studio 2010也接受了该代码(但在2008年失败)。
答案 1 :(得分:0)
是。它可能但你必须在它构造时初始化它。你不能没有初始化它。但在这种特殊情况下,我认为不可能,因为你无法在初始化列表中初始化数组。
顺便说一下,看看这个有趣的话题:
答案 2 :(得分:0)
没有。尝试使用GCC的-pedantic开关:
warning: ISO C++ prohibits anonymous structs
因此,移除const
后该示例也是非法的。