首页 > 解决方案 > 这就是 size() 函数在 std::string 中真正起作用的方式吗?

问题描述

我写了一个简单的函数,可以获取std::string类对象的大小,我知道这个size()函数std::string做同样的工作,所以我想知道这个size()函数是否真的像我的函数一样工作,或者它是否更复杂?如果它更复杂,那么如何?

int sizeOfString(const string str) {
    int i=0;
    while (str[i] != '\0') {
        ++i;
    }
    return i;
}

标签: c++

解决方案


Anstd::string可以包含空字节,因此您的sizeOfString()函数将对以下输入产生不同的结果:

std::string evil("abc\0def", 7);

至于您的另一个问题:该size()方法只是读出一个内部大小字段,因此它始终是恒定的时间,而您的则与字符串的大小成线性关系。

您可以std::string::size自己查看各种实现的实现:libc++MSVClibstdc++


推荐阅读