在Windows上,std :: basic_string <TCHAR>会比std :: wstring更可取吗?

据我了解,Windows#定义TCHAR作为基于生成的应用程序正确的字符types – 所以它是在UNICODE生成和char否则为wchar_t

因此,我想知道是否std::basic_string<TCHAR>std::wstring更可取,因为第一个理论上应该匹配应用程序的字符types,而第二个将总是很宽。

所以我的问题基本上是:在Windows上std::basic_string<TCHAR>是可取的std::wstring ? 而且,是否会有任何警告(即意外的行为或副作用)使用std::basic_string<TCHAR> ? 或者,我应该只是在Windows上使用std::wstring并忘记它?

我相信,发布应用程序的非Unicode版本(以支持Win95,或者保存一两个KB)是可取的时间早已过去了:现在,您将支持的基础Windows系统将基于unicode (所以使用基于char的系统接口实际上会通过在库中插入一个填充层来使代码复杂化),而且你是否可以节省任何空间还是值得怀疑的。 去std::wstring ,年轻人! – )

我已经在非常大的项目上完成了这个工作,并且效果很好:

 namespace std { #ifdef _UNICODE typedef wstring tstring; #else typedef string tstring; #endif } 

如果你不需要使用多字节字符串进行编译,你可以在任何地方使用wstring。 我不认为你需要在任何现代应用程序中支持多字节字符串。

注意: std命名空间应该是不受限制的,但是对于上面的方法我已经有几年没有任何问题了。

有一点要记住。 如果您决定在程序中一直使用std :: wstring,那么如果您正在使用UTF8与其他系统进行通信,则可能仍然需要使用std :: string。