【发布时间】:2017-10-20 01:33:58
【问题描述】:
我有以下受 SO 问题之一启发的代码:
int main()
{
wcout << "\n\n 1- Test normal string with wcout \n";
wcout << u8"\n 2- Test (u8) string with wcout \n";
wcout << u"\n 3- Test (u) string with wcout \n";
wcout << U"\n 4- Test (U) string with wcout \n";
wcout << L"\n 5- Test (L) string with wcout \n\n";
}
导致:
cout 有类似的输出。
我从this post 的回答中了解到 w/cout 不支持字符串 U/u 前缀,或者完全如前所述:
同时
std::cout's类对于const char16_t*、const char32_t*和const wchar_t*没有特殊的<<重载,因此它将匹配<<打印指针的重载。
我的问题是:
1- 为什么它不支持这些类型?语言不支持自己的类型不是很奇怪吗? 2- 是否有任何已知计划在可预见的未来添加此类支持?
我知道 iostream 是一个库,但实际上,它仍然是语言的一部分。
【问题讨论】:
-
编码和(宽)字符表示是正交的东西。 IMO 在您链接的问题中得到了回答。
-
@πάνταῥεῖ 我知道
u8""字符串文字存在歧义,因为它映射到没有关联编码的const char[],但u""映射到const char16_t[]和U""映射到const char32_t[],根据 this reference 暗示 UTF-16 / UTF-32 编码。 -
@zett42 好吧,这就是为什么我一直在支持这个问题(我自己在理解这个问题时遇到了一些问题;-))。