如何检查是否设置了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() == 0
或s.empty()
)。
std :: string的默认构造函数总是返回一个设置为空string的对象。
std::string
没有“unset”状态,它总是被设置为某个东西。
我不认为你可以告诉std :: string类。 然而,如果你真的需要这些信息,你总是可以从std :: string中派生一个类,并且让派生类能够判断它是否在构造(或其他任意时间)之后被修改了。 或者更好的是,只要编写一个包装std :: string的新类,由于缺less基类虚拟析构函数,派生自std :: string可能不是一个好主意。 这可能是更多的工作,但更多的工作往往需要一个最佳的解决scheme。
当然,你总是可以假设它是否包含除“”之外的东西,那么它已经被“设置”了,但是这并不会检测到它被手动设置为“”。