结构内工会的常量成员的问题

Problems with const members of a union within a structure

本文关键字:常量 问题 成员 结构      更新时间:2023-10-16

我想将结构的某些部分声明为 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"添加一个构造函数,否则由于未初始化的 const 变量,您会收到编译错误。

但是我得到一个错误 -

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

如果我将联合构造函数更改为读取,我可以解决此问题 -

valuesUnion() : integer(0) {}

然后我没有收到来自g ++的错误,但它无法在Visual Studio 2012上编译 -

值联盟::real' :必须在构造函数基/成员初始值设定项列表中初始化

我这样做的方式是错误的吗?

谢谢。

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

如果您更改

union valuesUnion

struct valuesUnion

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