Инициализация строк как пустая строка или пустая строка

Как бы это важно, если мой код на С++ (как показано ниже) имеет строку, инициализированную как пустую строку:

std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
    // do something
}

против. no/null инициализация:

std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
    // do something
}

Есть ли какие-либо лучшие практики или gotchas вокруг этого?

Ответ 1

Там функция empty() готова для вас в std::string:

std::string a;
if(a.empty())
{
    //do stuff. You will enter this block if the string is declared like this
}

или

std::string a;
if(!a.empty())
{
    //You will not enter this block now
}
a = "42";
if(!a.empty())
{
    //And now you will enter this block.
}

Ответ 2

Нет ошибок. Конструкция по умолчанию std::string равна "". Но вы не можете сравнить строку с NULL. Самое близкое, что вы можете получить, это проверить, является ли строка пустой или нет, с помощью метода std::string::empty.

Ответ 3

Лучший:

 std::string subCondition;

Это создает пустую строку.

Это:

std::string myStr = "";

выполняет инициализацию копии - создает временную строку из "", а затем использует конструктор копирования для создания myStr.

Bonus:

std::string myStr("");

выполняет прямую инициализацию и использует конструктор string(const char*).

Чтобы проверить, является ли строка пустой, просто используйте empty().

Ответ 4

Пустота и "NULL-ness" - это две разные концепции. Как упоминалось выше, первое может быть достигнуто с помощью std::string::empty(), последнее может быть достигнуто с помощью boost::optional<std::string>, например:

boost::optional<string> myStr;
if (myStr) { // myStr != NULL
    // ...
}

Ответ 5

Я бы предпочел

if (!myStr.empty())
{
    //do something
}

Также вам не нужно писать std::string a = "";. Вы можете просто написать std::string a; - по умолчанию он будет пустым

Ответ 6

Конструктор по умолчанию инициализирует строку пустой строкой. Это более экономичный способ сказать одно и то же.

Однако сравнение с NULL воняет. Это старый синтаксис, который все еще используется, что-то другое; нулевой указатель. Это означает, что вокруг нет строки.

Если вы хотите проверить, является ли строка (которая существует) пустой, используйте вместо этого метод empty:

if (myStr.empty()) ...