我目前在Windows上开发,但以后想让我的应用程序跨平台。它没有/不需要GUI。
我一直在使用wstrings,希望这是最好的解决方案。 我在项目设置中使用“多字节字符集”。
wstring在所有其他平台上都支持吗?
我目前在Windows上开发,但以后想让我的应用程序跨平台。它没有/不需要GUI。
我一直在使用wstrings,希望这是最好的解决方案。 我在项目设置中使用“多字节字符集”。
wstring在所有其他平台上都支持吗?
std::wstring
,它的定义和含义在不同平台上似乎是不同的:例如,在Windows上,wchar_t
(std::wstring
的基本“构建块”)大小为2字节,而在Linux上则为4字节。因此,在Windows上,可以使用std::wstring
以UTF-16格式存储Unicode字符串(这也是Win32 API使用的Unicode格式),但在Linux上,应该使用std::wstring
来存储Unicode UTF-32字符串。所以,如果同一个类(std::wstring
)在不同平台上有不同的含义,我不会将其定义为可移植的。如果要编写可移植的代码,可以考虑使用std::string
并在其中存储Unicode UTF-8文本(实际上,std::string
基于大小为1字节的char
,在Windows和Linux上都是如此)。std::u16string
,它非常便携,因为它被定义为basic_string<char16_t>
,所以可以在每个平台上用于存储Unicode UTF-16文本,而不会产生歧义。wstring在其他平台上也支持吗?
应该是的。 std::wstring
是 C++ 输入/输出标准库的一部分,因此任何符合标准库规范的实现都必须提供它。
由于它是标准的 C++,使用 std::wstring
的程序可以保证可移植性 - 至少对于涉及 std::wstring
的使用而言是这样。
cpp
文件仅使用标准C++功能(包括核心语言和库,没有MS扩展,也没有Windows特定的头文件),那么应该可以。 - Andy Prowlstd::wstring
基于wchar_t
,而wchar_t
在不同平台上具有_不同_的大小(例如,在Windows上为2个字节,在Linux上为4个字节),我不会将std::wstring
定义为可移植的。C++11的新std::u16string
是可移植的(如果OP想要在其中存储UTF-16文本)。 - Mr.C64
wstring
具有不同的编码方式,因此毫无意义。请参考 http://www.utf8everywhere.org。 - Dietrich Epp