我有这个联合体:
union Foo
{
uint32_t u32;
struct
{
uint32_t a : 10;
uint32_t b : 10;
uint32_t c : 10;
uint32_t d : 2;
};
Foo() : a(0), b(1), c(2), d(3)
{
}
};
我们有一个工具可以分析C++代码中的潜在错误,但它会出现误报,认为我在编写时没有初始化
u32
。我发现VC++可以让我编写这个成员初始化列表:
Foo() : u32(0), a(0), b(1), c(2), d(3)
它确实关闭了工具,但看起来非常可疑。(根据评论编辑:GCC和Clang不接受它,因此“非常可疑”似乎是合理的。)
对于结构体,成员初始化器按照在结构体中定义的顺序执行。是否有类似的东西用于联合体,以确保由于u32(0)而不会被归零?
我们没有太多关于可移植性的意图。目前,该项目针对Windows系统,但将来可能面向iOS和Android。我可以几乎保证它不会出现在奇怪和神秘的平台上。
当然,我可以在构造函数体中设置a、b、c和d,这样就避开了整个问题(或者我可以禁用警告),但这让我很好奇。