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

时间:2010-10-11 04:48:29

标签: c++

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

编辑:     如果我设置的字符串也是空的怎么办?我是否必须使用其他标志来检查std::string是否已设置?

6 个答案:

答案 0 :(得分:95)

使用empty()

std::string s;

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

答案 1 :(得分:23)

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

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

答案 2 :(得分:17)

你不能;至少与测试指针是否为NULL的方式不同。

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

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

答案 3 :(得分:3)

std :: string的默认构造函数始终返回一个设置为空字符串的对象。

答案 4 :(得分:2)

std::string没有“未设置”状态,总是设置为某种状态。

答案 5 :(得分:0)

我认为你不能告诉std :: string类。但是,如果您确实需要此信息,则始终可以从std :: string派生一个类,并使派生类能够判断它自构造(或其他任意时间)后是否已更改。或者更好的是,只需编写一个包装std :: string的新类,因为从std :: string派生可能不是一个好主意,因为缺少基类虚拟析构函数。这可能是更多的工作,但是最佳解决方案往往需要更多的工作。

当然,您可以随时假设它是否包含“”之外的其他内容,然后它已经“设置”,但这不会手动检测到它被设置为“”。