gpt4 book ai didi

C++ 文字和 Unicode

转载 作者:行者123 更新时间:2023-11-30 01:40:57 26 4
gpt4 key购买 nike

C++ 字面量

环境:

  • 操作系统:Windows 10 专业版;
  • 编译器:GCC 最新版本。
  • IDE:Code::Blocks latest.
  • 致力于:控制台应用程序。

我对数字文字前缀的理解是它们有助于确定数值类型(不确定)。但是,我对字符和字符串文字前缀和后缀有很多困惑。我读了很多书,花了几天时间试图了解情况,但我得到的问题更多,答案却很少。所以我认为堆栈溢出可能会有很大帮助。

问题:

1- 字符串前缀 u8 u U L 的正确用法是什么?

我有以下代码作为示例:

#include <iostream>
#include <string>
using namespace std;

int main()
{
cout << "\n\n Hello World! (plain) \n";
cout << u8"\n Hello World! (u8) \n";
cout << u"\n Hello World! (u) \n";
cout << U"\n Hello World! (U) \n";
cout << L"\n Hello World! (plain) \n\n";

cout << "\n\n\n";
}

输出是这样的:

Hello World! (plain)

Hello World! (u8)

0x47f0580x47f0840x47f0d8

Q2:为什么U u ans L会有这样的输出?我预计它只是确定类型而不是进行编码映射(如果是的话)。

Q3 是否有关于像 UTF-8 这样的编码的简单而中肯的引用资料。我对它们感到困惑,此外我怀疑控制台应用程序是否能够处理它们。我认为了解它们至关重要。

问题 4:另外,我会欣赏解释自定义类型字面量的分步引用。

最佳答案

先看:http://en.cppreference.com/w/cpp/language/string_literal

std::cout的类运算符 <<正确重载以打印 const char* .这就是打印前两个字符串的原因。

cout << "\n\n Hello World! (plain) \n";
cout << u8"\n Hello World! (u8) \n";

正如预期的那样,打印1:

Hello World! (plain)

Hello World! (u8)

同时 std::cout的类(class)没有特殊<< const char16_t* 过载, const char32_t*const wchar_t* , 因此它将匹配 <<的打印指针过载,这就是为什么:

cout << u"\n Hello World! (u) \n";
cout << U"\n Hello World! (U) \n";
cout << L"\n Hello World! (plain) \n\n";

打印:

0x47f0580x47f0840x47f0d8

如您所见,实际上打印了 3 个指针值:0x47f058 , 0x47f0840x47f0d8


但是,对于最后一个,您可以使用 std::wcout 使其正确打印

std::wcout << L"\n Hello World! (plain) \n\n";

打印

 Hello World! (plain)

1:u8由于直接 ASCII mapping,所以按预期打印了文字UTF-8 的前几个代码点。

关于C++ 文字和 Unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354126/

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