5

有没有区别

if ( a or b or c ) {

...和...

if ( a || b || c ) {

...以及更一般地在两个运算符之间,即使在优先级方面?

4

4 回答 4

6

除了让许多经验丰富的程序员认为“咦,有人突然开始写 Pascal 吗?”的风格意义之外,没有功能上的区别。

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

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

于 2013-02-22T11:21:22.663 回答
2

编辑你可以超载operator or

他们是一样的。

请参阅C 和 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;
}
于 2013-02-22T11:21:15.913 回答
1

根据 ISO14882:2011(e) 2.6-2(表 2)or是 的替代标记||,因此具有完全相同的含义:

在语言的所有方面,除了拼写之外,每个替代标记的行为分别与其主要标记相同。

通常编译器将它们实现为#define or ||内部等效项。

and, bitor, xor, compl, bitand, and_eq, or_eq, xor_eq,not和 也一样not_eq

于 2013-02-22T11:21:21.507 回答
1

正如在其他答案中所说,两者是相同的,因此可以互换。但是有一个很大的区别:MSVC、C++ Builder 以及其他编译器可能不支持or不包含特殊头文件的情况。这使得使用or便携性障碍。

于 2013-02-22T12:42:30.977 回答