我正在使用C++11,两种方式都可以编译而没有任何警告,哪一种是最好的实现方式?
if(a && b)
if(a and b)
我正在使用C++11,两种方式都可以编译而没有任何警告,哪一种是最好的实现方式?
if(a && b)
if(a and b)
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);
是合法的? - supercatcompl
来声明一个析构函数。但是如果我在审核你的代码,我可能不会很客气! - BoBTFishif(a && b)
,因为误用 if(a & b)
的可能性很高,这会给您带来很多麻烦。请注意保留 HTML 标记。operator&&
的一致性怎么样?operatorand
没有运算符重载。(如果你尝试使用operator and
,不知道它会如何与标记生成器交互?) - Andre Kostur&&
运算符。但要注意的是,这种特定的重载会使得在使用该运算符时禁用短路求值(同样适用于 ||
),它会变成一个普通的函数调用,需要在调用函数之前对两个参数进行求值。 - Andre Kosturbitand
和and
之间的区别比&&
和&
更明显。我相信这在过去已经困扰了很多人(尽管我想不出我的代码中有什么例子)。 - jerryoperator and
,这是一个分词器的问题。如果你使用operatorand
,分词器会将其视为一个标记,并将其用作新的函数名。如果你使用operator and
,它会将它们视为两个单独的标记,并将其视为operator &&
相同(如果你尝试声明两者,甚至会抱怨重复声明)。 - Andre Kostur
&&
,不喜欢使用自己不熟悉的东西,因为这可能会暴露他们知识上的不足。 - RedX<iso646.h>
头文件中的宏,但在所有版本的C++中都是语言的一部分。 - R. Martinho Fernandes