c ++中未初始化的std :: string变量的值和大小

Cha*_*ard 29 c++ stdstring

如果字符串是这样定义的

std::string name;
Run Code Online (Sandbox Code Playgroud)

未初始化的字符串"name"的值是多少,它的大小是多少?

Pie*_*aud 44

因为它未初始化,所以它是被调用的默认构造函数.然后 :

空字符串构造函数(默认构造函数):

构造一个空字符串,长度为零个字符.

看看:http://www.cplusplus.com/reference/string/string/string/

编辑:C++ 11,§21.4.2/ 1中所述:

E ff ects:构造一个basic_string类的对象.该函数的后置条件如表63所示.

-> Table 63
+-----------------------------------------------------------------------------+
| data()     | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size()     | 0                                                              |
+------------+----------------------------------------------------------------+
| capacity() | an unspeci?ed value                                            |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)


Oli*_*rth 16

它不是未初始化的,它的默认构造函数被调用.

来自http://en.cppreference.com/w/cpp/string/basic_string/basic_string:

默认构造函数.构造空字符串.


Rap*_*ptz 12

默认构造的用户定义类型不是未初始化的.默认构造函数定义""一个大小/长度为零的空字符串(即).


jog*_*pan 5

标准(C++11,\xc2\xa721.4.2/1)描述了默认构造 a std::basic_string(它std::string是一个特化)的结果,如下所示:

\n\n
\n

[...] 类的对象basic_string。后置条件[...]如表 63 所示。

\n
\n\n

表 63 表示:

\n\n
\n

data() 可复制且可以添加 0 的非空指针
\n size()0
\n capacity()未指定的值

\n
\n

  • @vargonian:这并不意味着指针的值在数学上添加了“0”。这意味着“data()”结果指向的缓冲区末尾可能有一个额外的“\0”字节。这是非常糟糕的措辞。 (2认同)