“或”和“||”之间的区别

时间:2013-02-22 11:18:24

标签: c++

之间有什么区别吗?
if ( a or b or c ) {

......和......

if ( a || b || c ) {

......在两个运营商之间更一般,甚至在优先级方面?

4 个答案:

答案 0 :(得分:6)

除了让许多经验丰富的程序员认为“嗯,有人突然开始写Pascal吗?”的风格感,没有功能差异。

这些替代名称的目的是允许居住在瑞典或德国的人使用ASCII的标准本地变体,|ö

自从引入Unicode和扩展ASCII以来,这种需求几乎消失了,因为国有化的字符集不必“窃取”不太常用的字符来产生他们的国家“特殊”字符。

答案 1 :(得分:2)

已编辑您可以重载operator or

他们是一样的。

请参阅Operators in C and C++

如果为某个类型重载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 ||或内部等效项。

andbitorxorcomplbitandand_eqor_eq,{{1 },xor_eqnot

答案 3 :(得分:1)

正如在其他答案中所说,两者是相同的,因此是可交换的。但是有一个很大的区别:MSVC,C ++ Builder和其他编译器也不支持or而不包含特殊标头。这使得使用or成为可移植性障碍。