Как проверить если станд.:: строка установлена или нет?

При использовании a char*, Я могу инициализировать его к NULL и более поздняя проверка, если это установлено путем выполнения сравнения. Как сделать то же самое для a std::string? Как проверить, установлена ли строка или нет?

Править: Что, если строка я установил на, также пусто? Сделайте я должен использовать дополнительный флаг, чтобы проверить если std::string установлен или нет?

62
задан 11 October 2010 в 08:53

6 ответов

Используйте empty():

std::string s;

if (s.empty())
    // nothing in s
105
ответ дан 31 October 2019 в 13:30

Как несколько ответов, на которые указывают, std::string, не имеет никакого понятия 'пустых' для его значения. При использовании пустой строки как таковой значение не достаточно хорошо (т.е., необходимо различать строку, которая не имеет никаких символов и строки, которая не имеет никакого значения), можно использовать std::string* и установить его в NULL или к допустимому std::string экземпляр как соответствующий.

можно хотеть использовать своего рода тип интеллектуального указателя (повышение:: scoped_ptr или что-то), чтобы помочь управлять временем жизни любого std::string объект, на который Вы устанавливаете указатель.

24
ответ дан 31 October 2019 в 13:30

Вы не можете; по крайней мере, не тот же способ, которым можно протестировать, является ли указатель NULL.

А std::string объект всегда инициализируется и всегда содержит строку; его содержание по умолчанию является пустой строкой ("").

можно протестировать на пустоту (использующий s.size() == 0 или s.empty()).

17
ответ дан 31 October 2019 в 13:30

Нет никакого состояния "сброса" для std::string, это всегда набор к чему-то.

4
ответ дан 31 October 2019 в 13:30

Конструктор по умолчанию для станд.:: представьте в виде строки всегда возвращает объект, который установлен на пустую строку.

3
ответ дан 31 October 2019 в 13:30

Я не думаю, что можно сказать со станд.:: строковый класс. Однако при реальной необходимости в этой информации Вы могли бы всегда получать класс из станд.:: представьте в виде строки и дайте производному классу способность сказать, было ли это изменено начиная с конструкции (или некоторый другой произвольный момент времени). Или еще лучше, просто запишите новый класс, который переносит станд.:: строка начиная с получения из станд.:: строка не может быть хорошей идеей, учитывая отсутствие базового класса виртуальный деструктор. Это - вероятно, больше работы, но больше работы имеет тенденцию быть необходимым для оптимального решения.

, Конечно, можно всегда просто принимать, содержит ли это что-то другое, чем, "" затем это было "установлено", это не обнаружит его вручную устанавливаемый на "" все же.

0
ответ дан 31 October 2019 в 13:30

Другие вопросы по тегам:

Похожие вопросы: