【问题标题】:Why use "\t" instead of "<press TAB>" for strings? [duplicate]为什么对字符串使用“\t”而不是“<press TAB>”? [复制]
【发布时间】:2016-02-22 22:13:56
【问题描述】:

我刚刚尝试编译一些在字符串中使用文字 Tab 字符(如我按下键盘上的 TAB 键)的 C++ 代码。而且,令我惊讶的是,它编译得很好。回想起来,我认为这是有道理的,因为它和其他角色一样。

cout << "Tab: [TAB]";

在此之前,我一直使用\t 来定义字符串中的制表符。

cout << "Tab: [\t]";

显然,在字符串中使用文字 TABs 的代码的可读性会受到很大影响,但除了约定之外,还有其他技术原因使用 \t 吗?

【问题讨论】:

  • 不清楚你在问什么。您是否有代码可以演示您尝试实现的功能或突出您遇到的问题?
  • @Xirema 我不确定如何更清楚地了解它......为什么我应该在 C++ 字符串中使用 "\t" 而不是按键盘上的 TAB 键。无论哪种方式,功能似乎都是相同的。那么为什么一个比另一个更好呢?
  • @Xirema 够清楚了。
  • 许多开发人员都有自动将制表符转换为空格的编辑器设置。如果您使用文字制表符,它们会被转换为可能不受欢迎的空格。
  • 一方面,你可以区分 \t 和一堆空格。

标签: c++ tabs conventions


【解决方案1】:

但是除了惯例之外,还有其他技术原因使用\t吗?

当然有技术原因。使用

cout << "Tab: [\t]";

将独立于目标系统的实际字符编码工作。

源文件可以使用与目标系统不同的编码,例如源代码为 UTF8,目标系统为 EBCDIC
'\t' 将始终转换为正确的字符代码,因此代码是可移植的。


正如merlin2011comment 中提到的,许多IDE 只会将TAB 替换为特定数量的空格。

【讨论】:

  • 是在编译时(编译器计算机的字符编码)还是在运行时(运行终端的字符编码)确定?
  • @TheSchwa 它在编译时解决,考虑一些交叉编译器。
  • 我实际上没有得到反对票?我的回答有什么问题?
  • 那么字符编码是否可能但不太可能发生?我注意到 ASCII 和 UTF8 对 Tab 使用相同的编码(假设我正确阅读了表格)。
猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2020-02-10
  • 1970-01-01
相关资源
最近更新 更多