我在提问之前参考了以下文章:
std::string,wstring,u16/32string澄清
std::u16string、std::u32string、std::string、length()、size()、codepoints和字符 但它们没有回答我的问题。看下面的简单代码:
输出为:
鉴于
请原谅我这个初学者的问题。我的要求是要清晰地了解新的C++11字符串概念。
编辑:
从@Jonathan的答案中,我得到了问题的漏洞。我的意思是如何初始化char16_t,使得arr的长度变为2(即ab,c\0)。 FYI,以下结果不同:
std::u16string、std::u32string、std::string、length()、size()、codepoints和字符 但它们没有回答我的问题。看下面的简单代码:
#include<iostream>
#include<string>
using namespace std;
int main ()
{
char16_t x[] = { 'a', 'b', 'c', 0 };
u16string arr = x;
cout << "arr.length = " << arr.length() << endl;
for(auto i : arr)
cout << i << "\n";
}
输出为:
arr.length = 3 // a + b + c
97
98
99
鉴于
std::u16string
由 char16_t
而不是 char
组成,输出应该是:arr.length = 2 // ab + c(\0)
<combining 'a' and 'b'>
99
请原谅我这个初学者的问题。我的要求是要清晰地了解新的C++11字符串概念。
编辑:
从@Jonathan的答案中,我得到了问题的漏洞。我的意思是如何初始化char16_t,使得arr的长度变为2(即ab,c\0)。 FYI,以下结果不同:
char x[] = { 'a', 'b', 'c', 0 };
u16string arr = (char16_t*)x; // probably undefined behavior
输出:
arr.length = 3
25185
99
32767
char16_t
元素的array
。你用3
个元素初始化它... - HvS