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

15

我正在使用C++11,两种方式都可以编译而没有任何警告,哪一种是最好的实现方式?

if(a && b)
if(a and b)

2
@R.MartinhoFernandes 很多开发者像我的老师们。 - Thomas Ayoub
1
因为他们习惯于使用 &&,不喜欢使用自己不熟悉的东西,因为这可能会暴露他们知识上的不足。 - RedX
1
@JesusPlusPlus11,这是C语言中<iso646.h>头文件中的宏,但在所有版本的C++中都是语言的一部分。 - R. Martinho Fernandes
1
@JesusPlusPlus11 这是 C++98 的一部分。只是它并没有被广泛使用。 - juanchopanza
1
太酷了,我从来不知道!赞美C++。 - Name
显示剩余6条评论
4个回答

17

2.6 替代标记 [lex.digraph]

1 某些运算符和标点符号提供备选的标记表示形式。16

2 在语言的所有方面中,每个替代标记在其拼写方面以外都与其主要标记相同。17 替代标记集在表2中定义。

无法粘贴表2,但它明确说明了替代标记:and,主要标记:&&(对于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 的说法,微软在这里违反了规则。


那么这是否意味着,在给定 int x,y; 的情况下,说 memcpy(bitand x, bitand y, sizeof x); 是合法的? - supercat
@supercat 合法,没错。你甚至可以使用 compl 来声明一个析构函数。但是如果我在审核你的代码,我可能不会很客气! - BoBTFish

8
我更喜欢使用&&而不是and
  • &&被广泛认可,而许多人甚至不知道and是有效的C ++。
  • 一些IDE默认情况下不接受and(和friend)。例如MSVC ++
  • 至少对我来说,&&||的运算符优先级已经深入我的脑海。虽然andor具有与&&||相同的优先级,但我很少使用它们,这使得阅读条件更加困难。

另一方面,and更冗长,对于那些学习不使用&&的语言进行编程的程序员来说可能更容易使用。但是,有人可能会认为这些人应该学习C ++而不是尝试改变其语法。


5
我更倾向于使用 if(a && b),因为误用 if(a & b) 的可能性很高,这会给您带来很多麻烦。请注意保留 HTML 标记。

1
嗯...我在想operator&&的一致性怎么样?operatorand没有运算符重载。(如果你尝试使用operator and,不知道它会如何与标记生成器交互?) - Andre Kostur
对于运算符&&,也没有重载吗? - fiscblog
5
可以的。你可以为自己的类重载 && 运算符。但要注意的是,这种特定的重载会使得在使用该运算符时禁用短路求值(同样适用于 ||),它会变成一个普通的函数调用,需要在调用函数之前对两个参数进行求值。 - Andre Kostur
好观点,我没有考虑到bitandand之间的区别比&&&更明显。我相信这在过去已经困扰了很多人(尽管我想不出我的代码中有什么例子)。 - jerry
1
尝试在clang中使用operator and,这是一个分词器的问题。如果你使用operatorand,分词器会将其视为一个标记,并将其用作新的函数名。如果你使用operator and,它会将它们视为两个单独的标记,并将其视为operator &&相同(如果你尝试声明两者,甚至会抱怨重复声明)。 - Andre Kostur

4
作为一名同时使用 C 和 C++ 进行编程的人,除非在每种语言中使用不同的替代方案有充分的理由,否则我更喜欢保持一致性。尽管“and”已经成为 C 标准的一部分接近二十年了,但它需要一个头文件而不是内置于语言中。特别是当一段代码可能被用在多个项目中时,这样做的麻烦并不值得。
我从来没有见过使用“and”而不是 “&&” 会有优势的情况。虽然在现代开发系统中,“&” 键几乎无处不在,但如果你正在尝试在异常受限的移动/嵌入式系统上直接编程,那么它可能是有用的。我还认为,对于那些习惯于看到“&&”作为逻辑与操作符的人,它会降低代码的可读性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接