我经常在代码中遇到手动零初始化的 POD 结构,memset
如下所示:
struct foo;
memset(&foo, 0, sizeof(foo));
我检查了 C++11 标准,它说:“初始化器是一组空括号的对象,即 (),应进行值初始化。” 其次是: “对类型 T 的 [pod 结构] 进行值初始化意味着……对象被零初始化。”
那么...这是否意味着您始终可以安全地将上述代码压缩为以下内容:
struct foo{};
并且有一个保证初始化的结构,就好像你已经调用了memset(&foo, 0, ...)
?
如果是这样,那么一般来说,您可以使用空初始化程序安全地初始化任何东西,如下所示:
SomeUnknownType foo{}; // will 'foo' be completely "set" to known values?
我知道这在 C++03 中并不总是可能的(在统一初始化语法之前),但现在在 C++11 中对于任何类型都有可能吗?