如果使用 char*
,可以将其初始化为 NULL
,然后通过比较来检查是否已设置。如何为 std::string
做同样的事情?怎么检查字符串是否被设置了?
编辑:
如果我设置的字符串也为空怎么办?我需要使用额外的标志来检查 std::string
是否已设置吗?
如果使用 char*
,可以将其初始化为 NULL
,然后通过比较来检查是否已设置。如何为 std::string
做同样的事情?怎么检查字符串是否被设置了?
编辑:
如果我设置的字符串也为空怎么办?我需要使用额外的标志来检查 std::string
是否已设置吗?
使用empty()
函数:
std::string s;
if (s.empty())
// nothing in s
""
,会发生什么? - nakiyastd::string
不是指针,你不能将null赋值给它。” - GManNickG""
,我必须保留另一个 bool
或其他东西来检查它是否已设置。:S - nakiyastd::string
的指针,要么使用提供此类功能的包装器(如Boost.Optional)。 - James McNellisstd::optional
可以用作包装器来表示未实例化的字符串。就像 James McNellis 已经建议的 Boost 中的等效方法一样。 - stackprotector正如其他回答所指出的那样,std::string
没有关于其值的“空值”概念。如果使用空字符串作为这种值不够好(即,您需要区分没有字符和没有值的字符串),则可以使用 std::string*
并根据需要将其设置为 NULL 或有效的 std::string
实例。
您可能希望使用某种智能指针类型(例如 boost::scoped_ptr)来帮助管理将指针设置为的任何 std::string
对象的生命周期。
boost::optional<std::string>
。模板 boost::optional<T>
的存在恰恰是为了支持那些天生没有“空值性”的类型的情况。 - MSalters你无法像测试指针是否为NULL
那样测试std::string
对象是否为空。
std::string
对象总是被初始化并且始终包含一个字符串;默认情况下它的内容是空字符串(""
)。
你可以使用s.size() == 0
或者s.empty()
来测试是否为空。
对于 std::string
来说,不存在“未设置”状态,它总是被设置成某个值。
std::string的默认构造函数总是返回一个设置为空字符串的对象。
std::string() == std::string("")
。 - SingleNegationElimination我认为你无法通过std :: string类来判断。但是,如果您确实需要此信息,则可以从std :: string派生一个类,并使得派生类能够判断它是否自构造(或某个其他任意时间)以来已更改。或者最好编写一个包装std :: string的新类,因为由于缺少基类虚析构函数,派生自std :: string可能不是一个好主意。这可能需要更多工作,但是为了获得最佳解决方案,通常需要更多的工作。
当然,您始终可以假设如果std :: string包含除“”之外的内容,则已经“设置”,但这不会检测是否手动将其设置为“”。
std::string
封装为成员变量。 - James McNellis