Значение и размер неинициализированной std :: string переменной в С++

Если строка определена как

std::string name;

Каким будет значение неинициализированной строки "name" и какого размера она будет?

Ответ 1

Поскольку он не инициализирован, он вызывается конструктором по умолчанию. Тогда:

пустой конструктор строк (конструктор по умолчанию):

Создает пустую строку с длиной нулевых символов.

Посмотрите: http://www.cplusplus.com/reference/string/string/string/

РЕДАКТИРОВАТЬ: Как указано в С++ 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                                            |
+-----------------------------------------------------------------------------+

Ответ 3

По умолчанию созданные пользователем типы не являются неинициализированными. Конструктор по умолчанию определяет пустую строку (i.e "") с размером/длиной 0.

Ответ 4

Стандарт (С++ 11, §21.4.2/1) описывает результаты построения по умолчанию a std::basic_string (из которых std::string является специализацией) следующим образом:

[...] объект класса basic_string. Постусловия [...] указаны в таблице 63.

И в таблице 63 говорится:

data() ненулевой указатель, который может быть скопирован и может добавить 0 к нему
size() 0
capacity() неопределенное значение

Ответ 5

значение равно null, а размер равен 0 Но вы можете прямо chk, если строка пуста или нет пустым()

На всякий случай, если вы хотите проверить это в своем приложении, сделайте это

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

Подобное и более подробное обсуждение здесь инициализация строк как нулевая или пустая строка