15

我正在使用 C++11 并且两者都在没有任何警告的情况下进行编译,女巫是最好的方法吗?

if(a && b)

或者

if(a and b)
4

4 回答 4

17

2.6 替代标记 [lex.digraph]

1 为某些运算符和标点符号提供了替代标记表示。16

2在该语言的所有方面,每个替代标记的行为分别与其主要标记相同,除了其拼写。17 替代标记集在表 2 中定义。

无法粘贴表 2,但它明确指出 Alternative: and、 Primary &&(与or和相同||)。

所以它们是完全一样的。如果您想尝试说服自己一个比另一个“更好”,那是您的事。如果其他人试图这样争论,他们最好有一个很好的理由。

编辑:上述表2:

Table 2 — Alternative tokens
Alternative Primary
<%          {
%>          }
<:          [
:>          ]
%:          #
%:%:        ##
and         &&
bitor       |
or          ||
xor         ˆ
compl       ~
bitand      &
and_eq      &=
or_eq       |=
xor_eq      ˆ=
not         !
not_eq      !=

编辑:也许值得注意的是,根据Sebastian Redl的说法,MS 在这里打破了规则。

于 2013-06-14T14:06:34.760 回答
8

我更喜欢&&而不是and.

  • &&广为人知并被接受,而许多人甚至不知道这and是有效的 C++
  • 默认情况下,某些 IDE 不接受and(和朋友)。例如MSVC++
  • 至少对我来说,&&and的运算符优先级||在我脑海中根深蒂固。虽然and和 与 和具有or相同的优先级,但我不太习惯它们的简单事实使得阅读条件变得更加困难。&&||

另一方面,and对于那些学习过使用不使用&&. 但有人可能会争辩说,这些人应该学习 C++ 而不是试图改变它的语法。

于 2013-06-14T14:06:56.363 回答
5

我更喜欢 if(a 和 b) ,因为总是有机会意外地将 if(a && b) 与 if(a & b) 混淆,给你带来很多麻烦..

于 2013-06-14T14:03:38.157 回答
4

作为同时使用 C 和 C++ 编程的人,除非有充分的理由在每种语言中使用不同的替代方案,否则我更愿意保持一致。尽管and近二十年来一直是 C 标准的一部分,但它需要一个头文件,而不是内置到语言中。尤其是当一段代码可能用于多个项目时,这种麻烦是不值得的。

我从未见过使用andover&&会有优势的情况。我无法想象没有&密钥的现代开发系统,但也许如果您尝试在不寻常的平台上做某事(例如直接在严重受限的移动/嵌入式系统上编程),它会很有用。我还认为它降低了我的代码对于那些非常习惯于将其&&视为逻辑和运算符的人的可读性。

于 2013-06-14T14:29:47.967 回答