std :: basic_string <TCHAR>会优于Windows上的std :: wstring吗?

Mat*_*yan 10 c++ windows unicode stl

据我了解,Windows #defines TCHAR作为基于构建的应用程序的正确字符类型 - 因此它wchar_t在UNICODE构建中,char否则.

因此,我想知道是否std::basic_string<TCHAR>会更好std::wstring,因为第一个理论上会匹配应用程序的字符类型,而第二个总是宽.

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

Ale*_*lli 17

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


Bri*_*ndy 9

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

namespace std
{
#ifdef _UNICODE
    typedef wstring tstring;
#else
    typedef string tstring;
#endif
}
Run Code Online (Sandbox Code Playgroud)

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

注意:std命名空间应该是不受限制的,但是几年来我对上述方法没有任何问题.

  • 同样,虽然我当时可能没有把它放在std命名空间中. (2认同)
  • 嗯,为什么不只是`typedef std :: basic_string &lt;TCHAR&gt; tstring`? (2认同)