之间有什么区别吗?
if ( a or b or c ) {
......和......
if ( a || b || c ) {
......在两个运营商之间更一般,甚至在优先级方面?
答案 0 :(得分:6)
除了让许多经验丰富的程序员认为“嗯,有人突然开始写Pascal吗?”的风格感,没有功能差异。
这些替代名称的目的是允许居住在瑞典或德国的人使用ASCII的标准本地变体,|
为ö
。
自从引入Unicode和扩展ASCII以来,这种需求几乎消失了,因为国有化的字符集不必“窃取”不太常用的字符来产生他们的国家“特殊”字符。
答案 1 :(得分:2)
已编辑您可以重载operator or
。
他们是一样的。
如果为某个类型重载operator or
,则不能重载operator||
相同的类型,因为编译器会将它们视为相同的函数。
此错误来自以下代码:
> prog.cpp: In function ‘bool operator||(Type, Type)’:
> prog.cpp:8:6: error: redefinition of ‘bool operator||(Type, Type)’
> prog.cpp:4:6: error: ‘bool operator||(Type, Type)’ previously defined here
在ideaone上:
class Type {}
};
bool operator or(Type lhs, Type rhs) {
return true;
}
bool operator ||(Type lhs, Type rhs) {
return false;
}
int main() {
Type a;
Type b;
a or b;
a || b;
}
答案 2 :(得分:1)
根据ISO14882:2011(e)2.6-2(表2)or
是||
的替代标记,因此具有完全相同的含义:
在语言的各个方面,每个替代令牌都表现出来 同样,分别作为主要令牌,但拼写除外。
编译器通常将它们实现为#define or ||
或内部等效项。
and
,bitor
,xor
,compl
,bitand
,and_eq
,or_eq
,{{1 },xor_eq
和not
。
答案 3 :(得分:1)
正如在其他答案中所说,两者是相同的,因此是可交换的。但是有一个很大的区别:MSVC,C ++ Builder和其他编译器也不支持or
而不包含特殊标头。这使得使用or
成为可移植性障碍。