C++ 是不是;“坏习惯”;在字符串文字中使用制表符?

C++ 是不是;“坏习惯”;在字符串文字中使用制表符?,c++,c,coding-style,string-literals,C++,C,Coding Style,String Literals,作为后续(请注意,我不是上述问题的作者) 我知道这样的代码被认为是“坏习惯”。这些评论似乎在暗示同样的事情。然而,出于某种原因,标准允许这种欺骗,因此必须有人在其中没有发现任何危害,或者有它的用例 转义制表符字符不是被广泛接受的“坏习惯”吗?我从未真正想过它,但我无法想象找到文本选项卡空间字符是个好主意,因为您无法立即将它们与标准空白区区分开来。如果您出于某种特定原因需要在字符串文本中使用tabspace,那么编写\t会更清楚、更明确,这样每个人都能准确地知道您想要做什么 顺便说一句,仅仅因为标

作为后续(请注意,我不是上述问题的作者)

我知道这样的代码被认为是“坏习惯”。这些评论似乎在暗示同样的事情。然而,出于某种原因,标准允许这种欺骗,因此必须有人在其中没有发现任何危害,或者有它的用例


转义制表符字符不是被广泛接受的“坏习惯”吗?

我从未真正想过它,但我无法想象找到文本选项卡空间字符是个好主意,因为您无法立即将它们与标准空白区区分开来。如果您出于某种特定原因需要在字符串文本中使用tabspace,那么编写
\t
会更清楚、更明确,这样每个人都能准确地知道您想要做什么


顺便说一句,仅仅因为标准允许就必须有一个好的用例的概念……有点被打破了。例如,该标准允许我们声明原始指针,并在Literals中使用制表符而不是转义制表符来编写
new

'\t'
,“\t”)是一种不好的做法,因为:

  • 读者没有立即意识到有一个标签。结果:错误的代码假设,错误的更改(例如,当需要调整所有代码输出时)
  • 根据编辑器的不同,选项卡展开可能会有所不同。后果:妨碍团队合作和维护,因为不同的人可能会看到不同的布局
  • 最重要的是:某些编辑器在保存源文件时(使用配置的选项卡扩展设置)将选项卡转换为空格,以摆脱此类嵌入的选项卡。结果:未被注意到/不希望发生的更改(例如:当团队成员使用这样的编辑器并进行次要编辑时,即使在该字符串中也不例外)
可能没有人做过调查,长期以来这种做法一直很糟糕,如果不是因为其他原因,很容易通过意外地将制表符转换为空格来破坏代码。我在我的代码计数器中标记这些,这对我来说似乎是一个主观问题!最初的问题很好,因为它需要确凿的事实。一般来说,C不会试图保护程序员不做愚蠢的事情。允许比禁止更容易,假设程序员知道他们在做什么。“医生,我这样做会很痛。-不要那样做。”@CodesInChaos这就是为什么我总是害怕只懂python或C#的程序员的原因。@iharob:这个问题有点让人困惑,因为原来的问题有一个相反的标题,但我想他是在说不逃避表格字符是一种糟糕的做法。你知道吗。我不太明白你为什么要再问一次。很简单。我不是专家,评论似乎说编译器无论如何都会处理它。如果有疑问,请询问。这就是问答的工作原理,对吗?@Mast:编译器将“处理”什么?轻量级,之前的研究是我对这两种语言的经验。我可以理解为什么不应该这样做,但我在过去看到过一些事情,我不同意这是一个好的做法。因此,我没有接受对相关问题的评论作为答案,而是发布了自己的问题。防止错误地接受错误的陈述。@zenith第二点认为这是一种不好的做法,因为它妨碍了团队合作和维护。示例:程序员A使用制表位8在字符串中嵌入制表符。程序员B必须维护代码,以4的制表位打开代码,进行一些更改以改变制表符在行中的位置。输出似乎完全没有对齐,所以他将添加另一个选项卡,等等。@Christophe:如果他出于这样一个不好的原因在字符串文本中任意添加tabspaces,那么这是一个相当不称职的开发人员!当然,这种不称职的开发者确实存在。@LightnessRacesinOrbit:世界并不完美!。。。我也不会责怪这样的人:许多专业编辑提供的标签扩展功能表明,大多数人认为标签在代码中是用于缩进的,而不是普通的。任何人都不应该反对这种流行思想;-)@克里斯托夫:甚至这个假设也被打破了,因为自动将制表符缩进转换为邪恶的空格缩进是魔鬼的工作。