我正在修改广泛使用 TCHAR 的其他人的代码。在我的代码中使用 std::wstring 是更好的形式吗? wstring 应该等同于 Widechar 平台上的 TString,所以我没有看到问题。基本原理是,使用原始 wstring 比支持 TCHAR 更容易......例如,使用 boost:wformat。
下一个维护者会更清楚哪种风格?我自己浪费了几个小时试图理解字符串的复杂性,似乎仅仅使用 wstring 就会切断你需要理解的一半内容。
typedef std::basic_string<TCHAR> TString; //on winxp, TCHAR resolves to wchar_t
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
...唯一的区别是分配器。
在不太可能的情况下,您的程序
登陆到 Window 9x 机器上,有
仍然是一个可以翻译的API层
将 UTF-16 字符串转换为 8 位字符。
使用 TCHAR 没有任何意义
用于新代码开发。source https://stackoverflow.com/questions/3240609/at-runtime-how-can-i-tell-if-im-on-winxp-win32/3241266#3241266
如果您只想针对 Unicode (wchar_t) 平台,那么最好使用 std::wstring。如果你想支持多字节和 Unicode 构建,你将需要使用 TString 和类似的。
另请注意,basic_string 根据传入的字符类型将 char_traits 和分配器默认为 1,因此在 UNICODE(或 _UNICODE,我永远不记得是哪个)的构建中,TString 和 wstring 将是相同的。
注意:如果您只是将参数传递给各种 API,而不对它们进行任何操作,那么最好使用const wchar_t *
而不是直接使用 std::wstring (特别是混合 Win32、COM 和标准 C++ 代码时),因为您最终会减少转换和复制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)