如何检查是否设置了std :: string?

如果使用char* ,我可以将它初始化为NULL ,稍后通过比较来检查它是否被设置。 如何为std::string做同样的事情? 如何检查string是否设置?

编辑:如果我设置的string也是空的? 我必须使用额外的标志来检查std::string是否被设置?

使用empty()

 std::string s; if (s.empty()) // nothing in s 

正如几个答案指出的, std::string没有“nullness”的概念。 如果使用空string作为一个值是不够好的(即,你需要区分一个没有字符的string和一个没有值的string),你可以使用std::string*并设置它为NULL或适当的有效的std::string实例。

您可能需要使用某种智能指针types(boost :: scoped_ptr或其他)来帮助pipe理您设置指针的任何std::string对象的生命周期。

你不能; 至less不一样的方式可以testing一个指针是否为NULL

一个std::string对象总是被初始化并且总是包含一个string; 其内容默认是一个空string( "" )。

您可以testing空(使用s.size() == 0s.empty() )。

std :: string的默认构造函数总是返回一个设置为空string的对象。

std::string没有“unset”状态,它总是被设置为某个东西。

我不认为你可以告诉std :: string类。 然而,如果你真的需要这些信息,你总是可以从std :: string中派生一个类,并且让派生类能够判断它是否在构造(或其他任意时间)之后被修改了。 或者更好的是,只要编写一个包装std :: string的新类,由于缺less基类虚拟析构函数,派生自std :: string可能不是一个好主意。 这可能是更多的工作,但更多的工作往往需要一个最佳的解决scheme。

当然,你总是可以假设它是否包含除“”之外的东西,那么它已经被“设置”了,但是这并不会检测到它被手动设置为“”。