c++ - 我今天应该使用 TCHAR 吗?

标签 c++ winapi tchar

<分区>

我开始着手一个用 C++ 编写的 Windows 桌面的全新项目。当我学习 Windows 编程时,我读到使用 TCHAR 是一个很大的改进,因为我可以在不更改代码的情况下构建程序的 ANSI 或 Unicode 版本。但是,我从未真正使用过该选项来构建 ANSI 版本。此外,在 C++ 的标准库中,没有 TCHAR,我必须为 std::string、std::stringstream 等及其对应的宽字符串创建 typedef。所以目前我正在考虑放弃 TCHAR 转而使用 wchar_t,我收集了以下优点和缺点。

优点:

  • 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/

相关文章:

c++ - 函数模板中的数组值类型推导

c++ - WinAPI:创建具有指定客户区大小的窗口

c++ - GetComputerName() 返回空结果

c++ - memcpy 仅通过 C++ 复制一个字节

c++ - 为什么 fmt::format 不接受字符串作为参数?

c++ - 同一程序在 Windows 和 Linux 上的行为不同

c# - 以编程方式确定是否启用了 Windows 8 安全启动

c++ - 无法从 'unsigned short [9]' 转换为 'char []'

c++ - 多维数组计算

c++ - QString 从行首或行尾修剪非空白字符