[英]Would std::basic_string<TCHAR> be preferable to std::wstring on Windows?
据我所知,Windows #defines 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
而忘记它吗?
我相信发布应用程序的非unicode版本(支持Win95,或者保存一两个KB)的时间早已过去:现在您支持的基础Windows系统将基于unicode (因此,使用基于字符的系统接口实际上会通过插入库中的填充层来使代码复杂化)并且您是否可以节省任何空间是值得怀疑的。 Go std::wstring
,年轻人! - )
我在非常大的项目上完成了这项工作,效果很好:
namespace std
{
#ifdef _UNICODE
typedef wstring tstring;
#else
typedef string tstring;
#endif
}
你可以在任何地方使用wstring,如果你不喜欢,如果你不需要使用多字节字符串进行编译。 在任何现代应用程序中,我认为您不需要支持多字节字符串。
注意: std
命名空间应该是不受限制的,但是几年来我对上述方法没有任何问题。
要记住一件事。 如果您决定在程序中一直使用std :: wstring,那么如果您正在使用UTF8与其他系统进行通信,则可能仍需要使用std :: string。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.