Если строка определена как
std::string name;
Каким будет значение неинициализированной строки "name" и какого размера она будет?
Если строка определена как
std::string name;
Каким будет значение неинициализированной строки "name" и какого размера она будет?
Поскольку он не инициализирован, он вызывается конструктором по умолчанию. Тогда:
пустой конструктор строк (конструктор по умолчанию):
Создает пустую строку с длиной нулевых символов.
Посмотрите: 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 |
+-----------------------------------------------------------------------------+
Он не неинициализирован, его конструктор по умолчанию вызывается.
Из http://en.cppreference.com/w/cpp/string/basic_string/basic_string:
Конструктор по умолчанию. Создает пустую строку.
По умолчанию созданные пользователем типы не являются неинициализированными. Конструктор по умолчанию определяет пустую строку (i.e ""
) с размером/длиной 0.
Стандарт (С++ 11, §21.4.2/1) описывает результаты построения по умолчанию a std::basic_string
(из которых std::string
является специализацией) следующим образом:
[...] объект класса
basic_string
. Постусловия [...] указаны в таблице 63.
И в таблице 63 говорится:
data()
ненулевой указатель, который может быть скопирован и может добавить 0 к немуsize()
0capacity()
неопределенное значение
значение равно null, а размер равен 0 Но вы можете прямо chk, если строка пуста или нет пустым()
На всякий случай, если вы хотите проверить это в своем приложении, сделайте это
std::string name // Construct an empty string
if(name.empty()) { // Check if its empty
name="something";
}
Подобное и более подробное обсуждение здесь инициализация строк как нулевая или пустая строка