Подтвердить что ты не робот

Как проверить, установлен ли параметр std::string или нет?

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

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

4b9b3361

Ответ 1

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

std::string s;

if (s.empty())
    // nothing in s

Ответ 2

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

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

Ответ 3

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

Объект

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

Вы можете проверить пустоту (используя s.size() == 0 или s.empty()).

Ответ 4

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

Ответ 5

Нет состояния "unset" для std::string, оно всегда установлено на что-то.

Ответ 6

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

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