#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'\0' << L"哈哈" << std::endl;
std::cout << '\0' << "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'\0'
, кажется, отличаются от char(0)
и '\0'
и приводят к тому, что ostream
имеет плохое состояние.
Мне потребовалось некоторое время, чтобы выяснить, что пропущенный вывод вызван не настройкой локали, а wchar_t
, поскольку моя оригинальная программа где-то выводит wchar_t(0)
или '\0'
.
Мой вопрос: чем они отличаются от версии char
? А как правильно использовать пустую wchar_t
?
Заранее спасибо.