以下代码示例来自cppreference: http://en.cppreference.com/w/cpp/language/zero_initialization
#include <string>
double f[3]; // zero-initialized to three 0.0's
int* p; // zero-initialized to null pointer value
std::string s; // zero-initialized to indeterminate value
// then default-initialized to ""
int main(int argc, char* argv[])
{
static int n = argc; // zero-initialized to 0
// then copy-initialized to argc
delete p; // safe to delete a null pointer
}
它表示std :: string初始化为 indeterminate 值为零。同一页面也表示对于非联合类类型,所有非静态成员都是零初始化。
在不知道std :: string的实现细节的情况下,我认为它有一个char *成员,它存储实际的字符串值。如果是这种情况,不应该将char *零初始化为空指针,如果是,那么为什么该值是不确定的?
答案 0 :(得分:3)
基本成分是零初始化的,但std::string
的那些零值意味着,如果有的话,完全取决于实现。
动态初始化调用std::string
构造函数并建立类不变量(关于实例内部状态的基本假设)。
只有在那之后才能保证对象可用。