如果使用char*
,我可以将其初始化为NULL
,然后通过进行比较来检查它是否已设置。如何为std::string
做同样的事情?如何检查字符串是否设置?
编辑:
如果我设置的字符串也是空的怎么办?我是否必须使用其他标志来检查std::string
是否已设置?
答案 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() == 0
或s.empty()
)。
答案 3 :(得分:3)
std :: string的默认构造函数始终返回一个设置为空字符串的对象。
答案 4 :(得分:2)
std::string
没有“未设置”状态,总是设置为某种状态。
答案 5 :(得分:0)
我认为你不能告诉std :: string类。但是,如果您确实需要此信息,则始终可以从std :: string派生一个类,并使派生类能够判断它自构造(或其他任意时间)后是否已更改。或者更好的是,只需编写一个包装std :: string的新类,因为从std :: string派生可能不是一个好主意,因为缺少基类虚拟析构函数。这可能是更多的工作,但是最佳解决方案往往需要更多的工作。
当然,您可以随时假设它是否包含“”之外的其他内容,然后它已经“设置”,但这不会手动检测到它被设置为“”。