gpt4 book ai didi

c++ - std::string 和 std::u16string (或 u32string)之间的区别

转载 作者:行者123 更新时间:2023-12-02 02:32:44 29 4
gpt4 key购买 nike

在此处提问之前,我已经引用了以下帖子:

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::u16stringchar16_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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com