C++ 将std::wstring移植到gcc cygwin

C++ 将std::wstring移植到gcc cygwin,c++,windows,gcc,cygwin,C++,Windows,Gcc,Cygwin,我正在尝试将一个用VisualStudio2010编写的项目从Microsoft编译器移植到gcc Cygwin。我的问题是gcc Cygwin或gcc是否支持std::wstring?这有什么办法吗 是的。它支持,但不容易 为了支持wstring,您的平台需要支持一系列 wchar\t功能。Q.标准C++流和区域 兰格和克雷夫特 仅仅说“嘿,我们有wchar\u t和wchar\u t”是不够的 角色特征,因此我们可以打开std::wstring。”平台也 需要为C++宽字符I/O:WiSt流

我正在尝试将一个用VisualStudio2010编写的项目从Microsoft编译器移植到gcc Cygwin。我的问题是gcc Cygwin或gcc是否支持std::wstring?这有什么办法吗

是的。它支持,但不容易

为了支持wstring,您的平台需要支持一系列 wchar\t功能。Q.标准C++流和区域 兰格和克雷夫特

仅仅说“嘿,我们有wchar\u t和wchar\u t”是不够的 角色特征,因此我们可以打开std::wstring。”平台也 需要为C++宽字符I/O:WiSt流提供支持, wostream、facet、cvt、locale。这就是事情发展的方向 有问题

对于Windows上的Cygwin来说,平台是Cygwin(它非常酷) POSIXAPI层)比WinAPI更重要

旁白:我不确定MinGW的情况是什么,但是因为MinGW使用 直接使用WinAPI,而不是使用更像Unix的POSIXAPI作为 方法,MinGW可能不在这种Cygwin情况下

Windows确实支持该功能,但似乎没有人 经过了相当大的努力,才得以使用Cygwin 那些设施。(这些是FooW例程,而不是FooA 例程,在WinAPI中。要获得区域设置需要做很多工作 (请选择正确的工作方式。)

此外,Windows使用2字节的wchar\u t。(先前的UCS-2,来自 统一码 1.0时代。现在有了Vista和Win7,它是UTF-16。)让Cygwin使用2字节而不是4字节的wchar\u t会有点复古 他说。这只会让一切变得更加困难


有关更多详细信息,请访问gcc.gnu.org/ml/gcc帮助:

是。它支持,但不容易

为了支持wstring,您的平台需要支持一系列 wchar\t功能。Q.标准C++流和区域 兰格和克雷夫特

仅仅说“嘿,我们有wchar\u t和wchar\u t”是不够的 角色特征,因此我们可以打开std::wstring。”平台也 需要为C++宽字符I/O:WiSt流提供支持, wostream、facet、cvt、locale。这就是事情发展的方向 有问题

对于Windows上的Cygwin来说,平台是Cygwin(它非常酷) POSIXAPI层)比WinAPI更重要

旁白:我不确定MinGW的情况是什么,但是因为MinGW使用 直接使用WinAPI,而不是使用更像Unix的POSIXAPI作为 方法,MinGW可能不在这种Cygwin情况下

Windows确实支持该功能,但似乎没有人 经过了相当大的努力,才得以使用Cygwin 那些设施。(这些是FooW例程,而不是FooA 例程,在WinAPI中。要获得区域设置需要做很多工作 (请选择正确的工作方式。)

此外,Windows使用2字节的wchar\u t。(先前的UCS-2,来自 统一码 1.0时代。现在有了Vista和Win7,它是UTF-16。)让Cygwin使用2字节而不是4字节的wchar\u t会有点复古 他说。这只会让一切变得更加困难


有关更多详细信息,请访问gcc.gnu.org/ml/gcc帮助:

它确实有支持。此代码在g++4.8上编译良好(在任何符合标准的编译器上都应该如此):

#包括
#包括
int main(){
std::wstring s(L“你好,世界!”);

std::wcout它确实有支持。这段代码在g++4.8上编译得很好(在任何符合标准的编译器上都应该如此):

#包括
#包括
int main(){
std::wstring s(L“你好,世界!”);

如果我没记错的话,std::wcout std::wstring是标准的一部分。我不明白cygwind为什么不支持它。你测试过它吗?@cassiorenan:但是,它在Cygwin中的工作方式与在Visual Studio中完全不同。最容易假设它们是不相关的类。啊,我明白了。那么,不管我的答案如何。我对Visual Studio的工作方式不太熟悉特殊性。std::wstring是标准的一部分,如果我没记错的话。我不明白cygwind为什么不支持它。你测试过它吗?@cassiorenan:但是,它在Cygwin中的工作方式与在Visual Studio中完全不同。最容易假设它们是不相关的类。啊,我明白了。那么,不管我的答案如何。我对Visual St不是很熟悉udio的特殊性。
#include <iostream>
#include <string>

int main(){
  std::wstring s(L"Hello World!");
  std::wcout << s;
}