【问题标题】:std::string::length() vs. std::string::size() [duplicate]std::string::length() 与 std::string::size() [重复]
【发布时间】:2011-09-24 16:15:22
【问题描述】:

可能重复:
std::string length() and size() member functions

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

【问题讨论】:

    标签: c++ string stl


    【解决方案1】:

    不!没有不同。此函数更自然的名称是length(),并提供size() 以与容器保持一致。

    【讨论】:

    • @Armen:我现在没有这本书 :)
    • 如果将来语义发生变化,这将是有问题的。从语义上讲(除了 STL 语义),大小可以反映字符串的字节数),而长度可以指该字符串的“字符”数。在 ASCII 中,两者给出相同的结果,但这不适用于其他编码,如 UTF 等。
    • 我认为这与size() 是在每个STL 容器中定义的事实有关,但length() 听起来对字符串更熟悉,正如linked question 的接受答案中所解释的那样.我认为 ISO 和 ANSI 从来没有不同版本的标准。甚至(我认为是原始的)SGI STL 文档也指出 length 只是“size() 的同义词”。
    • @sitifensys: length() 定义为返回size();目前无法更改,太多的代码依赖于这种行为。
    • @sitifensys: 没关系,因为std::basic_string 没有“字符”的概念与其CharT 模板参数有任何不同,而CharT 就是这样(非常接近于)一个容器。所以size()length() 基本上都必须表示以CharT 为单位测量的大小。虽然 size() 在某些语言中可能是字节大小,与字符长度不同,但对于 std::string,它永远不会有区别,对于 std::wstring 也不是。
    猜你喜欢
    • 1970-01-01
    • 2010-10-28
    • 2012-08-31
    • 2021-12-10
    • 1970-01-01
    • 2012-11-04
    • 2012-04-23
    • 2012-09-28
    相关资源
    最近更新 更多