如果我具有以下结构:
struct MyStruct {
int *a;
int *b;
};
并像这样初始化它:
int some_var;
MyStruct s{
.a = &some_var
};
我可以确定s.b
将被初始化为nullptr
吗?
编辑:
完整的编译代码,已通过g ++ 7.3.0测试:
// test.cpp
struct MyStruct {
int *a;
int *b;
};
int main()
{
int some_var;
MyStruct s{
.a = &some_var
};
}
如果我在此示例中打印变量值,则b确实为0。但是我想知道标准是否可以保证这种行为。
答案 0 :(得分:1)
请注意,这是C99语法,C ++ 11标准不支持,但GCC支持。 GCC文档指出,与具有静态存储持续时间的对象一样,隐式初始化被省略的字段成员。
其他语法为
MyStruct s{
a: &some_var
};
如果多次初始化同一字段,则将使用上一次初始化的值对其进行初始化。如果这种初始化引起副作用,则不确定是否发生副作用。 GCC会丢弃它们,只有 last 初始化发生。
这是C ++ 11兼容的初始化:
MyStruct s { &some_var }; // second field would be initialized as one with static duration
在两种情况下,GCC都会发出有关缺少初始化器的警告。