在此处提问之前,我已经引用了以下帖子:
std::string, wstring, u16/32string clarification
std::u16string, std::u32string, std::string, length(), size(), codepoints and characters
但他们没有回答我的问题。看下面的简单代码:
#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
)。
仅供引用,下面给出了不同的结果:
char x[] = { 'a', 'b', 'c', 0 };
u16string arr = (char16_t*)x; // probably undefined behavior
输出:
arr.length = 3
25185
99
32767
最佳答案
否,您创建了一个包含四个元素的数组,第一个元素是 'a'
转换为 char16_t
,第二个元素是 'b'
code> 转换为 char16_t
等
然后从该数组(转换为指针)创建一个 u16string
,它读取每个元素直到 null 终止符。
关于c++ - std::string 和 std::u16string (或 u32string)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952008/