【发布时间】:2017-03-26 06:04:42
【问题描述】:
//更新1:
代码块 16.01
GCC 4.9.2
视窗 10
我正在努力理解:
- wchar_t 有什么用?
- char16_t 和 wchar_t 有什么区别?
我知道 char16_t 的大小保证为 16 位,但在这种特殊情况下,它们的大小相同。 - 每种 char 类型的正确文字是什么?
计划目标:
- 打印 U+0000 到 U+FFFF 范围内的所有 Unicode 字符。
//结束更新1
当我编译以下代码时:
#include <iostream>
int main(void)
{
std::cout << sizeof(wchar_t) << "\n";
for (wchar_t ch = u'\u0000'; ch <= u'\uffff'; ++ch)
std::wcout << " " << ch;
std::cout << "\n\n\n";
}
我在 for 语句的行上收到以下警告:“字符常量对于它的类型来说太长了”。
我搜索了网络,我能找到的只是 wchar_t 大小是实现定义的,但即便如此,它在我的系统上还是 2 个字节。我认为它已经足够大了。
Q1:为什么我收到警告?
Q2:为什么输出中有几个字符?我预计会有数千个。
【问题讨论】:
-
这段代码应该做什么?
-
为什么不改用 char16_t 呢?
-
什么编译器、版本和操作系统?
-
将
u'\uf00d'用于char16_t常量,将L'\uf00d'用于wchar_t常量。 -
另外,如果每个
wchar_t值都小于或等于\uffff,您的测试可能会失败。