zne*_*eak 6 c++ language-lawyer
我有这个联盟:
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)
{
}
};
Run Code Online (Sandbox Code Playgroud)
我们有一个工具可以分析C++代码中的潜在错误,并且u32在我写这个时它认为尚未初始化时会出现误报.
我发现VC++会让我写这个成员初始化列表:
Foo() : u32(0), a(0), b(1), c(2), d(3)
Run Code Online (Sandbox Code Playgroud)
它确实关闭了工具,但看起来......非常可疑.(根据评论进行编辑:GCC和Clang不会接受它,因此看起来很可疑.)
对于结构,成员初始值设定项按结构中的定义顺序执行.对于工会是否有类似的东西,以确保这不会因为u32(0)?
我们没有很好的可移植性.目前,该项目面向Windows,但未来可能会面向iOS和Android.我几乎可以保证它不会出现在奇怪和异国情调的平台上.
当然,我可以只设置a,b,c并d在构造函数的身体,它回避了整个问题(或者我可以禁用警告),但它让我好奇.
| 归档时间: |
|
| 查看次数: |
410 次 |
| 最近记录: |