std :: wstring.length()函数的结果是什么,wchar_t(s)的长度或符号的长度是多少?为什么?
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
答案 0 :(得分:12)
std::wstring::size()
返回字符串中的宽字符元素数。这与字符数不同(正如您所注意到的那样)。
不幸的是,std::basic_string
模板(以及它的实例化,例如std::string
和std::wstring
)与编码无关。从这个意义上讲,它实际上只是一个字节串的模板,而不是一串字符。
答案 1 :(得分:1)
首先,std :: wstring是std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >
的实例化。
虽然大多数实际工作都是由char_traits完成的,并且可以编写自己的工作,但主要是为了能够使用具有不同字符大小的C运行时库。
解析Element *指针的方法是直到char_traits指示的字符作为终结符。
但是,您可以使用指针和长度进行构造,在这种情况下,它将读取它告诉您的字符数,其中包括任何空字节。你可能在basic_string中嵌入了空字节,如果你调用length()或size()作为同一个东西的别名,它会告诉你它包含多少个字符。
char_traits中没有任何魔法可以将多元素字符解码为一个,也不应该尝试以这种方式实现它。
答案 2 :(得分:0)
size方法返回字符串中当前的元素数。它与wstring :: length相同 人们通常谈论一个单词,句子或段落的长度,而不是它的大小
答案 3 :(得分:0)
length()
和size()
通常会返回字符串中的“字符”数(不论宽度),不包括 null
,此处为长度&amp; size为2. capacity()
返回在字符串重新分配之前通常可用的内存量(读取:多少字符,因为这是多字节)。