porting std::wstring to gcc cygwin

porting std::wstring to gcc cygwin

本文关键字:gcc cygwin to wstring std porting      更新时间:2023-10-16

我正在尝试将Visual Studio 2010编写的项目从Microsoft编译器移植到gcc Cygwin。我的问题是 gcc Cygwin 或 gcc 是否支持 std::wstring ?有解决方法吗?

是的。 它支持,但不容易。

为了支持 wstring,您的平台需要支持一大堆 wchar_t功能。 q.v. 标准 C++ IOStreams 和 locales by 兰格和克雷夫特。

仅仅

说"嘿,我们有wchar_t,还有wchar_t"真的是不够的。 性格特征,所以我们可以打开std::wstring。 该平台还 需要为C++宽字符 I/O 提供支持:wistream, wostream, facet, cvt, locale. 这就是事情变成的地方 问题。

对于Windows上的Cygwin,该平台是Cygwin(而且它非常酷)。 POSIX API 层)比 WinAPI 更多。

ASIDE:我不确定MinGW的情况是什么,但由于MinGW使用 WinAPI 直接使用,而不是像 Unix 一样拥有更像 Unix 的 POSIX API 方法,MinGW可能不是在这种Cygwin的境地。

Windows确实支持该功能,似乎没有人 经历了相当多的努力来管道Cygwin使用 那些设施。 (这些是FooW例程,而不是FooA 例程,在 WinAPI 中。 并且有很多工作要获得区域设置 魔术可以正常工作。

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

有关更多详细信息,请转到gcc.gnu.org/ml/gcc-help

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

#include <iostream>
#include <string>
int main(){
  std::wstring s(L"Hello World!");
  std::wcout << s;
}