我应该使用"&&"还是"和"?

Tho*_*oub 15 c++ boolean-logic language-lawyer

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

if(a && b)
Run Code Online (Sandbox Code Playgroud)

要么

if(a and b)
Run Code Online (Sandbox Code Playgroud)

BoB*_*ish 17

2.6替代令牌[lex.digraph]

1为一些运营商和标点符号提供了替代的令牌表示

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      !=
Run Code Online (Sandbox Code Playgroud)

编辑:也许值得注意,根据塞巴斯蒂安雷德尔,MS在这里打破规则.


s3r*_*ius 8

我更喜欢&&而不是and.

  • &&众所周知并被接受,而许多人甚至不知道这and是有效的C++.
  • and默认情况下,某些IDE不接受(和朋友).例如MSVC++.
  • 至少对我来说,运营商优先考虑&&并且||根深蒂固.虽然andor具有相同的优先级为&&||,简单的事实,我已经习惯更不用说他们就更难读的条件.

另一方面,and对于那些使用不使用的语言学习编程的程序员来说,更加冗长,也可能更容易使用&&.但有人可能会争辩说,这些人应该学习C++,而不是试图改变它的snytax.


fis*_*log 5

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

  • 是的,有.您可以为自己的类重载`&&`.具有该特定重载的额外问题是,当与您的类一起使用时,它会禁用`&&`(以及类似的`||`)的短路评估(它成为正常的函数调用,在调用函数之前需要评估这两个参数). (5认同)