std::string::length()与std::string::size()的区别

19

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

我总是通过size()成员函数检索std::string的长度。 老实说,我从来不知道还有一个length()成员函数。 现在,我已经了解到了。 所以,我想知道这两者之间是否有任何区别,在很可能的否定情况下,为什么会有两个完全相同的成员函数?

1个回答

15

没有区别。这个函数的更自然的名称是length(),而size()是为了与容器保持一致性而提供的。


4
如果在未来语义发生改变,这将会是一个问题。从语义上讲(除了STL语义),size可以反映字符串的字节数,而length可以指代该字符串中的“字符”数。在ASCII中,这两者给出相同的结果,但对于其他编码如UTF等,则不成立。 - sitifensys
2
我认为这更多是因为size()在每个STL容器中都有定义,但是对于字符串来说,length()听起来更熟悉,正如链接问题中接受的答案所解释的那样。我不认为ISO和ANSI曾经有过不同版本的标准。即使是(我认为最初的)SGI STL文档也说明length只是“size()的同义词”。 - Matteo Italia
2
@sitifensys:length()被定义为返回size();此时无法更改,因为太多的代码依赖于这种行为。 - James McNellis
3
@sitifensys说,由于std::basic_string没有将“字符”视为与其模板参数CharT有任何不同的概念,因此实际上并不重要。而 CharT 就是它(非常接近)所包含的容器。因此,size()length() 在根本上都必须表示以CharT为单位测量的大小。虽然在某些语言中,size()可能表示以字节为单位的大小,与字符长度不同,但对于 std::string 来说,它永远不会与字符长度不同,并且对于 std::wstring 也是如此。 - Steve Jessop
@James 这绝对是真的,如果它在标准中被定义为这样,那么没有办法改变它而不破坏大量的代码,我想 :). @Steve 我明白你的观点,但我不是在谈论实现,而是在谈论字符串这个非常特殊的情况下“length”和“size”的含义。纠正我如果我错了,但字符串被用作字符的字符串,所以字符的概念应该在未来的某个时候被包括进来。 - sitifensys
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接