std :: string :: length()与std :: string :: size()

Arm*_*yan 18 c++ string stl

可能重复:
std :: string length()和size()成员函数

我总是std::string通过size()成员函数检索一个长度.说实话,我从来不知道有length()会员功能.好吧,我刚才知道有.所以我想知道两者之间是否存在任何差异,并且在可能出现否定答案的情况下,为什么会有两个成员函数完全相同?

Ry-*_*Ry- 13

不!没有不同.此功能的更自然的名称是length()并且size()与容器的均匀性一起提供.

  • 什么标准? (3认同)
  • 如果将来语义发生变化,这将是有问题的.从语义上讲(除了STL语义),大小可以反映字符串的字节数),而长度可以指代该字符串的"字符"数.在ASCII中,两者给出相同的结果,但这不适用于其他编码,如UTF等. (3认同)
  • @sitifensys:并不重要,因为`std :: basic_string`没有"characters"的概念与它的`charT`模板参数有任何不同,而`charT`就是它(非常接近于)a容器.所以`size()`和`length()`从根本上说都是指以'CharT`为单位测量的大小.虽然`size()`可能是某些语言的字节大小,与字符长度不同,但对于`std :: string`来说它并不是唯一的,而不是`std :: wstring`. (3认同)
  • 我认为它更多地与`size()`在每个STL容器中定义的事实有关,但`length()`对于字符串听起来更熟悉,如[链接问题]的接受答案中所解释的那样(http: //stackoverflow.com/questions/905479/stdstring-length-and-size-member-functions/905487#905487).我不认为ISO和ANSI曾经有过不同版本的标准.甚至(我认为原创)SGI STL文档也指出`length`只是"size()`的同义词." (2认同)
  • @sitifensys:`length()`定义为返回`size()`; 目前还没有办法可以改变,太多的代码依赖于这种行为. (2认同)