首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::wstring长度

std::wstring长度
EN

Stack Overflow用户
提问于 2010-11-15 19:12:28
回答 4查看 22.7K关注 0票数 8

std::wstring.length()函数的结果是什么,是以wchar_t(s)表示的长度还是以符号表示的长度?为什么?

代码语言:javascript
复制
TCHAR r2[3];
r2[0] = 0xD834;  // D834, DD1E - musical G clef
r2[1] = 0xDD1E;  //
r2[2] = 0x0000;  // '/0'

std::wstring r = r2;

std::cout << "capacity: " << r.capacity() << std::endl;
std::cout << "length: "   << r.length()   << std::endl;
std::cout << "size: "     << r.size()     << std::endl;
std::cout << "max_size: " << r.max_size() << std::endl;

Output>

capacity: 351
length: 2
size: 2
max_size: 2147483646
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-15 19:22:45

std::wstring::size()返回字符串中宽字符元素的数量。这与字符数不同(正如您正确注意到的)。

不幸的是,std::basic_string模板(以及它的实例,比如std::stringstd::wstring)是编码不可知的。从这个意义上说,它实际上只是一个字节字符串的模板,而不是一个字符串。

票数 14
EN

Stack Overflow用户

发布于 2010-11-15 19:56:50

首先,std::wstring是std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >的实例化。

尽管大多数实际工作都是由char_traits完成的,并且可以编写自己的代码,但这样做主要是为了能够使用具有不同字符大小的C运行时库。

解析元素*的指针的方法是,直到到达由char_traits指示为终止符的字符。

但是,您可以使用指针和长度进行构造,在这种情况下,它将读取它告诉您的字符数,其中将包括任何空字节。您可能在basic_string中嵌入了空字节,如果您调用length()或size() (它们是同一事物的别名),它将告诉您它包含多少个字符。

在char_traits中不存在将多元素字符解码为一个字符的魔术,您也不应该尝试以这种方式实现它。

票数 2
EN

Stack Overflow用户

发布于 2010-11-15 19:19:43

方法返回字符串中当前的元素数。它与wstring::length一样,人们通常谈论的是单词、句子或段落的长度,而不是它的大小

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4183736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档