C++ std :: string的长度,以字节为单位

Com*_*sMS 14 c++ string stdstring

我在弄清楚确切的语义时遇到了一些麻烦std::string.length().该文件明确指出,length()返回字符的字符串中而且数量不是字节数.我想知道在哪些情况下这实际上有所作为.

特别是,这只与非char实例化相关,std::basic_string<>或者在存储具有多字节字符的UTF-8字符串时是否也会遇到麻烦?标准是否允许length()UTF8感知?

Lig*_*ica 26

当处理非char实例化时std::basic_string<>,肯定,长度可能不等于字节数.这一点特别明显std::wstring:

std::wstring ws = L"hi";
cout << ws.length();     // <-- 2, not 4
Run Code Online (Sandbox Code Playgroud)

但是std::string关于char人物; 就std::string你所关注的问题而言,没有一个多字节字符这样的东西,无论你是否在高级别中填充了一个字符.因此,std::string.length()始终是字符串表示的字节数.请注意,如果您将多字节"字符"填入a std::string,那么您对"字符"的定义突然变得与容器和标准的定义不一致.


Joh*_*ing 10

如果我们具体谈论std::string,那么length() 确实返回字节数.

这是因为std::string是一个basic_stringchars和C++标准定义了一个大小char为刚好一个字节.

请注意,标准没有说明一个字节中有多少位,但这完全是另一个故事,你可能并不在乎.

编辑:标准确实说实现应提供一个定义,CHAR_BIT说明一个字节中有多少位.

顺便说一下,如果你沿着一条道路走,你在乎一个字节中有多少位,你可以考虑阅读.