或者是无效的C ++:为什么这段代码会编译?

时间:2009-09-16 14:31:51

标签: c++ or-operator

这是我用QtCreator制作的一个非常简单的C ++应用程序:

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    if (a < 1 or b > 3)
    {
       return 1;
    }
    return 0;
}

对我来说,这不是有效的C ++,因为关键字不是保留关键字。

但是如果我编译并运行它,它可以正常工作而没有任何警告!退出代码为0,如果我改变b = 4,则退出代码为1!

我没有包含任何内容以确保没有隐藏的定义。

这对我来说真的很奇怪。这是Qt定义的东西吗?我没有在文档中找到任何相关内容。

3 个答案:

答案 0 :(得分:54)

根据Wikipedia

  

C ++定义了充当别名的关键字   对于许多有效的符号   作为运算符:和(&amp;&amp;),bitand(&amp;),   and_eq(&amp; =),或(||),bitor(|),or_eq   (| =),xor(^),xor_eq(^ =),不是(!),   not_eq(!=),compl(〜)。

作为MadKeithV points out,这些替换来自C的iso646.h,并作为运算符关键字包含在ISO C ++中。关于iso646.h的维基百科文章说,这些关键字的原因确实适用于可能无法轻松访问这些符号的国际和其他非QWERTY键盘。

答案 1 :(得分:16)

or是一个C ++关键字,您可以使用它代替||。没有魔力。

and和大多数其他逻辑运算符也是如此。通常最好坚持使用众所周知的名字,以避免这样的混乱。如果你使用or,有人会想知道“为什么要编译”;)

答案 2 :(得分:7)

iso646.h定义了许多运算符替代 - 它是C ++标准的一部分。