当前位置:  开发笔记 > 编程语言 > 正文

C++:string.empty()总是等于string ==""?

如何解决《C++:string.empty()总是等于string==""?》经验,为你挑选了3个好方法。

我可以假设给定

std::string str;
... // do something to str

以下陈述是否总是如此?

(str.empty() == (str == ""))

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; }

讨论

尽管这两种形式是等价的std::string,但您可能希望使用.empty()它,因为它更通用.

事实上,JF塞巴斯蒂安评论说,如果切换到使用std::wstring替代的std::string,那么==""甚至不会编译,因为你不能一串比较wchar_t与之一char.但是,这与您的原始问题没有直接关系,我99%肯定您不会切换到std::wstring.



1> A. Rex..:

回答

是.以下是相关实现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; }

讨论

尽管这两种形式是等价的std::string,但您可能希望使用.empty()它,因为它更通用.

事实上,JF塞巴斯蒂安评论说,如果切换到使用std::wstring替代的std::string,那么==""甚至不会编译,因为你不能一串比较wchar_t与之一char.但是,这与您的原始问题没有直接关系,我99%肯定您不会切换到std::wstring.


@xtofl:原始问题的答案,只询问了std :: string,是明确的"是".
此外,empty()应该比==""更有效.

2> D.Shawley..:

它应该是.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()))

或类似的东西.如果你还没有做什么奇怪的,然后std::string("")std::string()应该是等价的

它们在逻辑上相似,但它们正在测试不同的东西.str.empty()正在检查字符串是否为空,而另一个正在检查C样式空字符串是否相等.我会使用哪个更适合你想要做的事情.如果您想知道字符串是否为空,请使用str.empty().



3> Gorpik..:

str.empty()永远不会慢,但可能比str ==""更快.这取决于实施.所以你应该使用str.empty()以防万一.

这有点像使用++ i而不是i ++来增加计数器(假设您不需要增量运算符本身的结果).您的编译器可能会进行优化,但是使用++ i并没有失去任何东西,并且可能会赢得一些东西,所以最好使用++ i.

除了性能问题,你的问题的答案是肯定的; 两个表达式在逻辑上是等价的.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有