如果一个字符串是这样定义的
std::string name;
未初始化的字符串“name”的值是多少,它的大小是多少?
因为没有初始化,所以调用的是默认构造函数。然后 :
空字符串构造函数(默认构造函数):
构造一个长度为零字符的空字符串。
看看: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 |
+-----------------------------------------------------------------------------+
它不是未初始化的,它的默认构造函数被调用。
来自http://en.cppreference.com/w/cpp/string/basic_string/basic_string:
默认构造函数。构造空字符串。
默认构造的用户定义类型不是未初始化的。""
默认构造函数定义一个大小/长度为零的空字符串(即)。
标准(C++11,第 21.4.2/1 节)描述了默认构造 a std::basic_string
(其中std::string
的一个特化)的结果,如下所示:
[...] 类的对象
basic_string
。后置条件 [...] 如表 63 所示。
表 63 说:
data()
可复制的非空指针,可以添加
size()
0 0
capacity()
未指定的值
value 为 null , size 为 0 但是你可以直接 chk 字符串是否为空
以防万一您想在应用程序中检查,请执行此操作
std::string name // Construct an empty string
if(name.empty()) { // Check if its empty
name="something";
}
类似和更详细的讨论是here 将字符串初始化为空字符串与空字符串