Sak*_*ket 39 c++ string initialization
如果我的C++代码(如下所示)有一个初始化为空字符串的字符串,这有什么关系:
std::string myStr = "";
....some code to optionally populate 'myStr'...
if (myStr != "") {
// do something
}
Run Code Online (Sandbox Code Playgroud)
与no/null初始化:
std::string myStr;
....some code to optionally populate 'myStr'...
if (myStr != NULL) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
有没有最好的做法或陷阱?
Sin*_*all 68
有一个功能empty()为你准备好了std::string:
std::string a;
if(a.empty())
{
//do stuff. You will enter this block if the string is declared like this
}
Run Code Online (Sandbox Code Playgroud)
要么
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.
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*ore 16
最好:
std::string subCondition;
Run Code Online (Sandbox Code Playgroud)
这会创建一个空字符串.
这个:
std::string myStr = "";
Run Code Online (Sandbox Code Playgroud)
进行复制初始化 - 从中创建临时字符串"",然后使用复制构造函数进行创建myStr.
奖金:
std::string myStr("");
Run Code Online (Sandbox Code Playgroud)
进行直接初始化并使用string(const char*)构造函数.
要检查字符串是否为空,请使用empty().
空洞和"空洞"是两个不同的概念.正如其他人所提到的,前者可以通过实现std::string::empty(),后者可以通过boost::optional<std::string>例如:
boost::optional<string> myStr;
if (myStr) { // myStr != NULL
// ...
}
Run Code Online (Sandbox Code Playgroud)
我希望
if (!myStr.empty())
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
你也不必写信std::string a = "";。您可以只写std::string a;-默认情况下它将为空