假设我有一个包含POD和非POD成员变量的C++结构:
struct Struct {
std::string String;
int Int;
};
Run Code Online (Sandbox Code Playgroud)
为了让我的程序产生可重现的行为,我希望在构造时初始化所有成员变量.我可以使用初始化列表:
Struct::Struct() : Int() {}
Run Code Online (Sandbox Code Playgroud)
问题是我需要更改我的结构并添加一个新的POD成员变量(比如说bool Bool
)我冒险忘记将其添加到初始化列表中.然后在结构构造期间不会对新成员变量进行值初始化.
我也不能使用这个memset()
技巧:
Struct::Struct()
{
memset( this, 0, sizeof( *this ) ); //can break non-POD member variables
}
Run Code Online (Sandbox Code Playgroud)
因为调用memset()
覆盖已经构造的非POD成员变量会破坏它们.
有没有办法在没有显式添加初始化的情况下强制执行所有POD成员变量的值初始化?
#include <vector>
struct S { int x; };
std::vector<S> v;
int main() { v.resize(1000); return v[42].x; }
Run Code Online (Sandbox Code Playgroud)
上述程序是否保证在C++ 14中返回0?为什么?