为什么std :: string初始化为零以确定不确定值

时间:2014-09-09 08:58:46

标签: c++ static initialization stdstring

以下代码示例来自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 *零初始化为空指针,如果是,那么为什么该值是不确定的?

1 个答案:

答案 0 :(得分:3)

基本成分是零初始化的,但std::string的那些零值意味着,如果有的话,完全取决于实现。

动态初始化调用std::string构造函数并建立类不变量(关于实例内部状态的基本假设)。

只有在那之后才能保证对象可用。