C ++:wstring跨平台?

时间:2013-04-13 10:28:13

标签: c++ cross-platform wstring

我目前正在开发Windows,但我想稍后让我的应用程序跨平台。它没有/需要GUI。

我一直在使用wstrings,希望这是最好的解决方案。 我在项目设置中使用“多字节字符集”。

是否所有其他平台都支持wstring?

2 个答案:

答案 0 :(得分:3)

即使其他平台支持std::wstring,其定义和含义在平台之间也会有所不同:例如: wchar_t(这是std::wstringis 2 bytes in size on Windows, while on on Linux it's 4 bytes的基本“构建基块”。

因此,您可以使用std::wstring在Windows上以 UTF-16 格式存储Unicode字符串(这也是Win32 API使用的Unicode格式),但在Linux上std::wstring std::wstring 1}}应该用于存储Unicode UTF-32 字符串。因此,如果同一个类(std::string)在不同平台上有不同的含义,我会将其定义为可移植。

或许,如果您想编写可移植代码,可以考虑使用std::string并在其中存储Unicode UTF-8 文本(事实上,char基于std::u16string,在Windows和Linux上都是1个字节)。

或者,如果您可以使用新的C ++ 11标准,您可能需要考虑 basic_string<char16_t> ,它实际上是可移植的,因为它被定义为{{1}},所以它可以用来在每个平台上存储Unicode UTF-16文本,没有歧义。

答案 1 :(得分:1)

  

是否所有其他平台都支持wstring?

应该是。 std::wstring是C ++输入/输出标准库的一部分,因此标准库的任何符合标准的实现都必须提供它。

由于它是标准C ++,因此保证使用std::wstring的程序是可移植的 - 至少与使用std::wstring有关。