结构中联合的const成员的问题

时间:2014-02-14 12:25:12

标签: c++

我想将结构的某些部分声明为const,因为我将它传递给API调用中的第三方。我打算通过使用C样式转换来转换const来填充值。这允许我设置它们,但API的用户知道这些是输入值,因为它们不能轻易地设置它们。

将其简化为一个简单的例子,我有

struct mystruct
{
  union valuesUnion
  {
    const int32_t integer;
    const double real;
    valuesUnion() : integer(0), real(0.0) {}
  } values;
  mystruct() : values(valuesUnion())
  {
  }
};

int main()
{
  mystruct a;
}

请注意,我必须为“mystruct”添加一个构造函数,否则会因为uninistalised const变量而出现编译错误。

但是我收到了错误 -

g ++ Z.cpp -o Z. Z.cpp:在构造函数中âmystruct:: valuesUnion :: valuesUnion()â: Z.cpp:11:5:错误:âmystruct::valuesUnionâ的多个成员的初始化 make: * [Z]错误1

如果我将union构造函数更改为read -

,我可以解决这个问题
valuesUnion() : integer(0) {}

然后我没有从g ++中得到错误,但它无法在Visual Studio 2012上编译 -

valuesUnion :: real':必须在构造函数base / member initializer list

中初始化

我是以错误的方式解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:2)

Union与类或结构不同,因为两个“属性”引用相同的内存单元。 只有在为同一内存区域进行两次初始化时,才能初始化此内存。

如果你改变了

union valuesUnion

struct valuesUnion

然后你可以检查你的初始化列表是否适合不同的内存区域。