我想将结构的某些部分声明为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
中初始化我是以错误的方式解决这个问题吗?
感谢。
答案 0 :(得分:2)
Union与类或结构不同,因为两个“属性”引用相同的内存单元。 只有在为同一内存区域进行两次初始化时,才能初始化此内存。
如果你改变了
union valuesUnion
的
struct valuesUnion
然后你可以检查你的初始化列表是否适合不同的内存区域。