如何初始化和打印std :: wstring?

Roe*_*rel 51 c++ c++-cli wstring

我有代码:

std::string st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

这工作得很好.但现在我的团队想要搬到wstring.所以我尝试过:

std::wstring st = "SomeText";
...
std::cout << st;
Run Code Online (Sandbox Code Playgroud)

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

错误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;
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么 ?

Bo *_*son 88

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

std::wstring st = L"SomeText";
...
std::wcout << st; 
Run Code Online (Sandbox Code Playgroud)


hmj*_*mjd 12

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


Val*_*Val 8

此答案适用于"C++/CLI"标记以及相关的Windows C++控制台.

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

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

结果: 多字节控制台


Hem*_*lia 6

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

std::wstring st = "SomeText";
...
std::wcout << st;
Run Code Online (Sandbox Code Playgroud)