我可以假设给定
std::string str;
... // do something to str
Run Code Online (Sandbox Code Playgroud)
以下陈述是否总是如此?
(str.empty() == (str == ""))
Run Code Online (Sandbox Code Playgroud)
A. *_*Rex 52
是.以下是相关实现bits/basic_string.h,代码为basic_string<_CharT, _Traits, _Alloc>:
/**
* Returns true if the %string is empty. Equivalent to *this == "".
*/
bool
empty() const
{ return this->size() == 0; }
Run Code Online (Sandbox Code Playgroud)
尽管这两种形式是等价的std::string,但您可能希望使用.empty()它,因为它更通用.
事实上,JF塞巴斯蒂安评论说,如果切换到使用std::wstring替代的std::string,那么==""甚至不会编译,因为你不能一串比较wchar_t与之一char.但是,这与您的原始问题没有直接关系,我99%肯定您不会切换到std::wstring.
D.S*_*ley 11
它应该是.ANSI/ISO标准规定了21.3.3 basic_string容量:
size_type size() const;返回:当前在字符串中的类似char的对象的计数.
bool empty() const;返回:
size() == 0
但是,在21.3.1 basic_string构造函数的第18节中,它指出字符类型赋值运算符用于traits::length()建立受控序列的长度,因此如果使用不同的特化,则可能会出现奇怪的结果std::basic_string<>.
我认为100%正确的说法就是这样
(str.empty() == (str == std::string()))
Run Code Online (Sandbox Code Playgroud)
或类似的东西.如果你还没有做什么奇怪的,然后std::string("")和std::string()应该是等价的
它们在逻辑上相似,但它们正在测试不同的东西.str.empty()正在检查字符串是否为空,而另一个正在检查C样式空字符串是否相等.我会使用哪个更适合你想要做的事情.如果您想知道字符串是否为空,请使用str.empty().
str.empty()永远不会慢,但可能比str ==""更快.这取决于实施.所以你应该使用str.empty()以防万一.
这有点像使用++ i而不是i ++来增加计数器(假设您不需要增量运算符本身的结果).您的编译器可能会进行优化,但是使用++ i并没有失去任何东西,并且可能会赢得一些东西,所以最好使用++ i.
除了性能问题,你的问题的答案是肯定的; 两个表达式在逻辑上是等价的.
| 归档时间: |
|
| 查看次数: |
68525 次 |
| 最近记录: |