如果字符串定义如下
std::string name;
未初始化的字符串“name”的值是多少,它的大小是多少?
答案 0 :(得分:38)
因为它未初始化,所以它是被调用的默认构造函数。然后:
空字符串构造函数(默认构造函数):
构造一个空字符串,长度为零个字符。
看看: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 unspecified value |
+-----------------------------------------------------------------------------+
答案 1 :(得分:15)
它不是未初始化的,它的默认构造函数被调用。
来自http://en.cppreference.com/w/cpp/string/basic_string/basic_string:
默认构造函数。构造空字符串。
答案 2 :(得分:12)
默认构造的用户定义类型未初始化。默认构造函数定义一个空字符串(即""
),其大小/长度为零。
答案 3 :(得分:4)
标准(C ++ 11,§21.4.2/ 1)描述了默认构造std::basic_string
(其中std::string
是专业化)的结果,如下所示:
[...]班级
basic_string
的对象。后置条件[...]如表63所示。
表63说:
data()
一个非空指针,可以复制并且可以添加0size()
0
capacity()
未指定的值
答案 4 :(得分:-4)
value为null,size为0 但是如果字符串为空,则可以通过empty()
直接chk如果您想在应用程序中检查,请执行此操作
std::string name // Construct an empty string
if(name.empty()) { // Check if its empty
name="something";
}
这里有类似和更详细的讨论 initializing strings as null vs. empty string