对于wchar_t,字符(0)或''的等价物是什么?

What is the equivalent of char(0) or '' for wchar_t?

本文关键字:是什么 等价物 wchar 字符 对于      更新时间:2023-10-16
#include <iostream>
#include <locale>
int main(int argc, char** argv) {
std::wcout.imbue(std::locale("zh_CN.UTF-8"));
std::wcout << wchar_t(0) << L"哈哈" << std::endl;
std::cout << char(0) << "haha" << std::endl;
std::cout << "---------------" << std::endl;
std::wcout.clear();
std::wcout << L"哈哈" << std::endl;
std::cout << "haha" << std::endl;
std::cout << "---------------" << std::endl;
std::wcout << L'' << L"哈哈" << std::endl;
std::cout << '' << "haha" << std::endl;
std::cout << "---------------" << std::endl;
std::wcout.clear();
std::wcout << L"哈哈" << std::endl;
std::cout << "haha" << std::endl;
return 0;
}

wchar_t(0)L''似乎与char(0)''不同,导致ostream状态不佳。

我花了一些时间才弄清楚丢失的输出不是由区域设置引起的,而是wchar_t,因为我的原始程序在某个地方输出了wchar_t(0)''

我的问题是它们与char版本有何不同?以及如何正确使用空wchar_t

提前谢谢。

空宽字符可以写为wchar_t(0)L''

您观察到的不同行为是因为coutwcout文本流。 根据 cpp 首选项,您应该只在文本流上使用可打印字符、tn。 向文本流发送空字符可能会产生意外结果。

如果您想在 Windows 中将cout用作二进制流,您可以做一些技巧,请参阅此处以获取想法。

我不确定这些黑客是否适用于wcout;但根据过去的经验,编译器中wcout支持的状态是可疑的,我发现只使用stdout并使用分面或显式函数等进行任何所需的翻译更可靠。