将字符串初始化为null与空字符串

时间:2012-07-19 08:02:04

标签: c++ string initialization

如果我的C ++代码(如下所示)将字符串初始化为空字符串,那将是多么重要:

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

VS。 no / null初始化:

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

是否有最佳做法或陷阱?

6 个答案:

答案 0 :(得分:65)

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.
}

答案 1 :(得分:20)

没有陷阱。 std::string的默认构造为""。但是你无法将字符串与NULL进行比较。您可以获得的最接近的是使用std::string::empty方法检查字符串是否为空。

答案 2 :(得分:14)

最佳:

 std::string subCondition;

这会创建一个空字符串。

此:

std::string myStr = "";

执行复制初始化 - 从""创建临时字符串,然后使用复制构造函数创建myStr

加成:

std::string myStr("");

进行直接初始化并使用string(const char*)构造函数。

要检查字符串是否为空,请使用empty()

答案 3 :(得分:6)

空洞和&#34; NULL-ness&#34;是两个不同的概念。正如其他人提到的那样,前者可以通过std::string::empty()实现,后者可以通过boost::optional<std::string>来实现,例如:

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

答案 4 :(得分:3)

我更喜欢

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

此外,您不必撰写std::string a = "";。你可以写std::string a; - 默认情况下它是空的

答案 5 :(得分:1)

默认构造函数将字符串初始化为空字符串。这是说同样事情的更经济的方式。

然而,与NULL的比较很糟糕。这是一种仍然常用的旧语法,意味着其他东西;空指针。这意味着周围没有字符串。

如果要检查字符串(确实存在)是否为空,请改用empty方法:

if (myStr.empty()) ...