构造函数和const成员的匿名联合

时间:2011-06-30 23:00:31

标签: c++ constructor const unions

是否可以与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]’

3 个答案:

答案 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后该示例也是非法的。