有没有区别
if ( a or b or c ) {
...和...
if ( a || b || c ) {
...以及更一般地在两个运算符之间,即使在优先级方面?
除了让许多经验丰富的程序员认为“咦,有人突然开始写 Pascal 吗?”的风格意义之外,没有功能上的区别。
这些替代名称的目的是允许居住在瑞典或德国的人们使用标准的 ASCII 本地变体,其中|
is ö
。
自从引入 Unicode 和扩展 ASCII 以来,这种需求几乎消失了,因为国有化字符集不必“窃取”不常用的字符来生成它们的国家“特殊”字符。
编辑你可以超载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;
}
根据 ISO14882:2011(e) 2.6-2(表 2)or
是 的替代标记||
,因此具有完全相同的含义:
在语言的所有方面,除了拼写之外,每个替代标记的行为分别与其主要标记相同。
通常编译器将它们实现为#define or ||
内部等效项。
and
, bitor
, xor
, compl
, bitand
, and_eq
, or_eq
, xor_eq
,not
和 也一样not_eq
。
正如在其他答案中所说,两者是相同的,因此可以互换。但是有一个很大的区别:MSVC、C++ Builder 以及其他编译器可能不支持or
不包含特殊头文件的情况。这使得使用or
便携性障碍。