If a string is defined like this

std::string name;

What will be the value of the uninitialized string "name" and what size it would be?

有帮助吗?

解决方案

Because it is not initialized, it is the default constructor that is called. Then :

empty string constructor (default constructor) :

Constructs an empty string, with a length of zero characters.

Take a look : http://www.cplusplus.com/reference/string/string/string/

EDIT : As stated in C++11, §21.4.2/1 :

Effects: Constructs an object of class basic_string. The postconditions of this function are indicated in Table 63.

-> Table 63
+-----------------------------------------------------------------------------+
| data()     | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size()     | 0                                                              |
+------------+----------------------------------------------------------------+
| capacity() | an unspecified value                                            |
+-----------------------------------------------------------------------------+

其他提示

It's not uninitialized, its default constructor is called.

From http://en.cppreference.com/w/cpp/string/basic_string/basic_string:

Default constructor. Constructs empty string.

Default constructed user-defined types are not uninitialized. The default constructor defines an empty string (i.e "") with a size/length of zero.

The Standard (C++11, §21.4.2/1) describes the results of default-constructing a std::basic_string (of which std::string is a specialization) as follows:

[...] an object of class basic_string. The postconditions [...] are indicated in Table 63.

And Table 63 says:

data() a non-null pointer that is copyable and can have 0 added to it
size() 0
capacity() an unspecified value

value is null , and size is 0 But you can directly chk if the string is empty or not by empty()

Just in case you want to check that in your application , Do this

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

Similar and more detailed discussion is here initializing strings as null vs. empty string

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top