Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
我开始致力于使用C ++编写的Windows桌面的全新项目。当我学习Windows编程时,我读到使用TCHAR是一个很大的改进,因为我可以在不更改代码的情况下构建程序的ANSI或Unicode版本。但是,我从未真正使用过该选项来构建ANSI版本。而且,在C ++的标准库中,没有TCHAR,我必须为std :: string,std :: stringstream等及其对应的宽字符串创建typedef。因此,目前我正在考虑放弃使用wchar_t的TCHAR,我收集了以下优点和缺点。
优点:
TCHAR是一个宏,因此,如果我不使用它,则前端编译器和Intellisense将提供更好的结果。
更明确的是变量的类型是什么。
L“”比_T(“”)更容易键入。
缺点:
关于字符类型的模块化丢失(即使我真的不需要ANSI版本,但我发现使用抽象字符类型是一种简洁的功能,如果将来我需要UTF-8或UTF-32怎么办?版?)。
我必须用W将一些API函数后缀化,例如GetWindowTextW。
我的问题是:
在C ++标准库中,有没有一种比我上面描述的更简单的方法来使用TCHAR?像具有这些typedef的标准头文件一样?
您认为我的推理正确吗?
我想念任何要点吗?
当今最先进的解决方案是什么?专业的Windows程序员仍在使用TCHAR(在新代码中)吗?
如果我删除了TCHAR,那我应该写L“”或u“”而不是_T(“”)?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
3年前关闭。
我开始致力于使用C ++编写的Windows桌面的全新项目。当我学习Windows编程时,我读到使用TCHAR是一个很大的改进,因为我可以在不更改代码的情况下构建程序的ANSI或Unicode版本。但是,我从未真正使用过该选项来构建ANSI版本。而且,在C ++的标准库中,没有TCHAR,我必须为std :: string,std :: stringstream等及其对应的宽字符串创建typedef。因此,目前我正在考虑放弃使用wchar_t的TCHAR,我收集了以下优点和缺点。
优点:
TCHAR是一个宏,因此,如果我不使用它,则前端编译器和Intellisense将提供更好的结果。
更明确的是变量的类型是什么。
L“”比_T(“”)更容易键入。
缺点:
关于字符类型的模块化丢失(即使我真的不需要ANSI版本,但我发现使用抽象字符类型是一种简洁的功能,如果将来我需要UTF-8或UTF-32怎么办?版?)。
我必须用W将一些API函数后缀化,例如GetWindowTextW。
我的问题是:
在C ++标准库中,有没有一种比我上面描述的更简单的方法来使用TCHAR?像具有这些typedef的标准头文件一样?
您认为我的推理正确吗?
我想念任何要点吗?
当今最先进的解决方案是什么?专业的Windows程序员仍在使用TCHAR(在新代码中)吗?
如果我删除了TCHAR,那我应该写L“”或u“”而不是_T(“”)?
最佳答案
在现代Windows中,所有ANSI函数都在内部将char*
转换为wchar_t*
并调用同一函数的unicode版本。基本上,通过采用TCHAR
而不是wchar_t
不会获得任何收益,但必须处理古怪的语法。
关于c++ - 我今天应该使用TCHAR吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40887567/
10-11 20:22