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

我有这样的代码:

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

这工作得很好。 但是现在我的团队想要转移 所以我试了一下:

 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

在search网页后,我读到应该将其定义为:

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

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

我究竟做错了什么 ?

要显示一个string,你还需要一个宽版的cout – wcout。

 std::wstring st = L"SomeText"; ... std::wcout << st; 

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

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

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

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

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

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

结果: 多字节控制台