我目前正在开发Windows,但我想稍后让我的应用程序跨平台。它没有/需要GUI。
我一直在使用wstrings,希望这是最好的解决方案。 我在项目设置中使用“多字节字符集”。
是否所有其他平台都支持wstring?
答案 0 :(得分:3)
即使其他平台支持std::wstring
,其定义和含义在平台之间也会有所不同:例如: wchar_t
(这是std::wstring
)is 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
有关。