我正在修改其他人的代码,该代码广泛使用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;

...唯一的区别是分配器。

在不太可能的情况下,你的程序 降落在一台9x窗口的机器上,有 还是一个可以翻译的API层 您的UTF-16字符串到8位字符。使用TCHAR毫无意义 用于新代码开发。 资料来源

有帮助吗?

解决方案

如果您只打算针对Unicode(wchar_t)平台,则最好使用std::wstring。如果你想支持多字节和Unicode构建,你将需要使用TString和类似的。

另请注意,basic_string根据传入的字符类型将char_traits和分配器默认为一个,因此在UNICODE(或_UNICODE,我永远不记得哪个),TString和wstring将相同的构建中。

注意事项:如果您只是将参数传递给各种Api,而不是对它们进行任何操作,则最好使用 const wchar_t * 而不是std::wstring直接(特别是如果混合Win32,COM和标准C++代码),因为你最终会做更少的转换和复制。

其他提示

tchar当您将两次编译二进制文件的位置更重要,每次用于CHAR和WCHAR_T的第二个。

如果您愿意,您仍然可以做出此选择,将MBCS的MSVC项目设置从MBCS更改为Unicode和Back。

这也意味着在调用Windows API时,您将拥有匹配的数据类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top