如果使用char*,我可以将其初始化为NULL,然后通过比较来检查它是否被设置。如何做一个相同的事情std::string?如何检查字符串是否设置?
编辑:如果我设置为字符串也为空怎么办?我是否必须使用其他标志来检查是否std::string设置了?
Answers:
用途empty():
std::string s;
if (s.empty())
// nothing in s
""
std::string不是指针,则不能为其分配null。
"",我都必须保留另一个字符串bool或其他内容来检查它是否已设置。:S
std::string像Michael Burr所建议的那样,要么使用指向a的指针。或者使用提供此类功能的包装器(如Boost.Optional)。
std::optional,您可以用作包装器来表示未实例化的字符串。像James McNellis一样,已经提出了Boost的等效方法。
正如几个答案所指出的那样,std::string它的价值没有“零”的概念。如果使用空字符串作为这样的值是不够的(即,您需要区分没有字符的字符串和没有值的字符串),则可以使用astd::string*并将其设置为NULL或a有效std::string实例。
您可能需要使用某种类型的智能指针类型(boost :: scoped_ptr或其他类型)来帮助管理std::string将指针设置到的任何对象的生命周期。
boost::optional<std::string>。模板的boost::optional<T>存在恰好是为了支持自然不具有它的类型的“零空”。
我认为您无法使用std :: string类来判断。但是,如果您确实需要此信息,则始终可以从std :: string派生一个类,并使派生的类具有分辨自构造以来(或其他任意时间)是否已更改的能力。或者更好的方法是,编写一个新的包装std :: string的类,因为鉴于缺少基类的虚拟析构函数,从std :: string派生可能不是一个好主意。这可能是更多的工作,但是要获得最佳解决方案,往往需要做更多的工作。
当然,您始终可以假设它是否包含“”以外的其他内容,则说明它已被“设置”,尽管这不会检测到手动将其设置为“”。
std::string为成员变量会更好。