【发布时间】:2011-09-24 16:15:22
【问题描述】:
我总是通过size() 成员函数检索std::string 的长度。老实说,我从来不知道还有length() 成员函数。嗯,我刚刚知道有。所以我想知道这两者之间是否有任何区别,并且在可能出现否定答案的情况下,为什么会有两个成员函数完全相同?
【问题讨论】:
我总是通过size() 成员函数检索std::string 的长度。老实说,我从来不知道还有length() 成员函数。嗯,我刚刚知道有。所以我想知道这两者之间是否有任何区别,并且在可能出现否定答案的情况下,为什么会有两个成员函数完全相同?
【问题讨论】:
不!没有不同。此函数更自然的名称是length(),并提供size() 以与容器保持一致。
【讨论】:
size() 是在每个STL 容器中定义的事实有关,但length() 听起来对字符串更熟悉,正如linked question 的接受答案中所解释的那样.我认为 ISO 和 ANSI 从来没有不同版本的标准。甚至(我认为是原始的)SGI STL 文档也指出 length 只是“size() 的同义词”。
length() 定义为返回size();目前无法更改,太多的代码依赖于这种行为。
std::basic_string 没有“字符”的概念与其CharT 模板参数有任何不同,而CharT 就是这样(非常接近于)一个容器。所以size() 和length() 基本上都必须表示以CharT 为单位测量的大小。虽然 size() 在某些语言中可能是字节大小,与字符长度不同,但对于 std::string,它永远不会有区别,对于 std::wstring 也不是。