74

我有代码:

std::string st = "SomeText";
...
std::cout << st;

效果很好。但现在我的团队想搬到wstring. 所以我尝试了:

std::wstring st = "SomeText";
...
std::cout << st;

但这给了我一个编译错误:

错误 1 ​​错误 C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax> &)' : 无法将参数 1 从 'const char [8]' 转换为'const std::basic_string<_Elem,_Traits,_Ax> &' D:...\TestModule1.cpp 28 1 TestModule1

在网上搜索后,我读到我应该将其定义为:

std::wstring st = L"SomeText"; // Notice the "L"
...
std::cout << st;

这已编译但打印"0000000000012342"而不是"SomeText".

我究竟做错了什么 ?

4

4 回答 4

132

要显示 wstring,您还需要一个宽版本的 cout - wcout。

std::wstring st = L"SomeText";
...
std::wcout << st; 
于 2012-01-09T12:00:15.833 回答
20

使用std::wcout而不是std::cout.

于 2012-01-09T12:00:25.087 回答
8

此答案适用于“C++/CLI”标签和相关的 Windows C++ 控制台。

如果您在 std::wstring 中有多字节字符,则还需要做两件事才能使其工作:

  1. 包括标题
    #include <io.h>
    #include <fcntl.h>
  2. 设置标准输出模式
    _setmode(_fileno(stdout), _O_U16TEXT)

结果: 多字节控制台

于 2017-01-11T06:27:43.913 回答
6

尝试使用 std::wcout<<st它会解决你的问题。

std::wstring st = "SomeText";
...
std::wcout << st;
于 2012-01-09T12:03:38.653 回答