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

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

编辑: 如果我设置的字符串也是空的呢?我必须使用一个额外的标志来检查是否设置了 std::string

161411 次浏览

使用 empty():

std::string s;


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

Std: : string 的缺省构造函数总是返回设置为空字符串的对象。

不能; 至少不能像测试指针是否为 NULL那样进行测试。

std::string对象始终是初始化的,并且始终包含一个字符串; 默认情况下,其内容是一个空字符串("")。

您可以测试是否为空(使用 s.size() == 0s.empty())。

std::string没有“未设置”状态,它是 一直都是设置为某种状态。

我不认为您可以通过 std: : string 类来判断。但是,如果您真的需要这些信息,您总是可以从 std: : string 派生一个类,并让派生类能够知道自构造以来(或其他任意时间)它是否发生了更改。或者更好的做法是,只编写一个包装 std: : string 的新类,因为从 std: : string 派生可能不是一个好主意,因为缺少基类虚析构函数。这可能需要做更多的工作,但要找到最佳解决方案,往往需要做更多的工作。

当然,您总是可以假设如果它包含“”以外的内容,那么它已经被“设置”了,但是这不会检测到手动将其设置为“”。

正如一些答案指出的那样,std::string的价值没有“零”的概念。如果使用空字符串作为这样的值不够好(例如,您需要区分没有字符的字符串和没有值的字符串) ,您可以使用 std::string*并将其设置为 NULL 或适当地设置为有效的 std::string实例。

您可能希望使用某种智能指针类型(ost: : scope _ ptr 或其他类型)来帮助管理您设置指针所指向的任何 std::string对象的生存期。