Value and size of an uninitialized std::string variable in c++

前端 未结 5 1581
既然无缘
既然无缘 2020-12-09 07:44

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?

相关标签:
5条回答
  • 2020-12-09 08:12

    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.

    0 讨论(0)
  • 2020-12-09 08:14

    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                                            |
    +-----------------------------------------------------------------------------+
    
    0 讨论(0)
  • 2020-12-09 08:17

    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

    0 讨论(0)
  • 2020-12-09 08:18

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

    0 讨论(0)
  • 2020-12-09 08:27

    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

    0 讨论(0)
提交回复
热议问题