Так и должно быть. Стандарт ANSI / ISO гласит: 21.3.3 basic_string
емкость :
size_type size() const;
Возвращает: количество похожих на символы объектов в настоящее время в строке.
bool empty() const;
Возвращает: size() == 0
Однако в пункте 18 конструкторов 21.3.1 basic_string
говорится, что оператор присваивания символьного типа использует traits::length()
, чтобы установить длину контролируемой последовательности, чтобы вы могли получить что-то странно, если вы используете другую специализацию std::basic_string<>
.
Я думаю, что 100% правильное утверждение состоит в том, что
(str.empty() == (str == std::string()))
или что-то в этом роде. Если вы не сделали ничего странного, то std::string("")
и std::string()
должны быть эквивалентны
Они логически похожи, но они проверяют разные вещи. str.empty()
проверяет, является ли строка пустой, тогда как другой проверяет равенство пустой строке в стиле C. Я бы использовал то, что больше подходит для того, что вы пытаетесь сделать. Если вы хотите узнать, пуста ли строка, используйте str.empty()
.