【发布时间】:2014-09-17 02:07:29
【问题描述】:
在这里提问之前我已经参考了以下帖子:
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
【问题讨论】:
-
您有一个
array的char16_t元素。你用3元素初始化它... -
@JonathanWakely,是的,确实,我的打字和我的想法有点冲突:)。点正在 - 使用
fixed数量的元素进行初始化。 -
+1 @downvoters:为什么要否决这个?这并不令人兴奋,但这是一个值得一提的陷阱。