41

如果一个字符串是这样定义的

std::string name;

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

4

5 回答 5

61

因为没有初始化,所以调用的是默认构造函数。然后 :

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

构造一个长度为零字符的空字符串。

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

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

效果:构造类basic_string的对象。该函数的后置条件如表 63 所示。

-> Table 63
+-----------------------------------------------------------------------------+
| data()     | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size()     | 0                                                              |
+------------+----------------------------------------------------------------+
| capacity() | an unspecified value                                            |
+-----------------------------------------------------------------------------+
于 2013-07-19T05:05:21.343 回答
19

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

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

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

于 2013-07-19T05:04:13.947 回答
17

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

于 2013-07-19T05:04:49.547 回答
4

标准(C++11,第 21.4.2/1 节)描述了默认构造 a std::basic_string(其中std::string的一个特化)的结果,如下所示:

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

表 63 说:

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

于 2013-07-19T05:30:48.320 回答
-9

value 为 null , size 为 0 但是你可以直接 chk 字符串是否为空

以防万一您想在应用程序中检查,请执行此操作

std::string name // Construct an empty string  
if(name.empty()) { // Check if its empty
  name="something";
}

类似和更详细的讨论是here 将字符串初始化为空字符串与空字符串

于 2013-07-19T06:04:49.767 回答