2

我正在修改广泛使用 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 进行新代码开发已经没有意义了。 资源

4

2 回答 2

2

如果您只打算针对 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++ 代码时),因为您最终会这样做更少的转换和复制。

于 2010-07-13T21:36:30.727 回答
0

当您要编译二进制文件两次时,TCHAR 曾经更重要,一次用于 char,另一次用于 wchar_t。

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

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

于 2010-07-13T21:40:14.857 回答