据我了解,Windows#根据构建将TCHAR定义为应用程序的正确字符类型 - 因此在UNICODE构建中为wchar_t
,否则为char
。
因此我想知道std::basic_string<TCHAR>
是否优于std::wstring
,因为第一个理论上与应用程序的字符类型匹配,而第二个总是宽。
所以我的问题基本上是:std::basic_string<TCHAR>
会优于Windows上的std::wstring
吗?并且,使用std::basic_string<TCHAR>
会有任何警告(即意外行为或副作用)吗?或者,我应该在Windows上使用std::wstring
并忘记它吗?
答案 0 :(得分:17)
我认为发布应用程序的非unicode版本(支持Win95,或者保存一两个KB)的时间早已过去:现在您支持的基础Windows系统将会是基于unicode(因此使用基于字符的系统接口实际上会通过插入库中的填充层来使代码复杂化)并且你是否会节省任何空间是值得怀疑的。年轻人去std::wstring
! - )
答案 1 :(得分:9)
我在非常大的项目中完成了这项工作,并且效果很好:
namespace std
{
#ifdef _UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif
}
如果您不需要使用多字节字符串进行编译,则可以在任何地方使用wstring。在任何现代应用程序中,我认为您不需要支持多字节字符串。
注意:std
命名空间应该是不受限制的,但我几年来没有遇到任何上述方法的问题。
答案 2 :(得分:3)
要记住一件事。如果您决定在程序中一直使用std :: wstring,那么如果您正在使用UTF8与其他系统进行通信,则可能仍需要使用std :: string。