24

这是我用 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 定义的东西吗?我在文档中没有找到任何关于此的内容。

4

3 回答 3

55

根据维基百科

C++ 将关键字定义为充当运算符的许多符号的别名:and (&&)、bitand (&)、and_eq (&=)、or (||)、bitor (|)、or_eq (|=)、 xor (^)、xor_eq (^=)、not (!)、not_eq (!=)、compl (~)。

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

于 2009-09-16T14:33:10.543 回答
16

or是 C++ 关键字,您可以使用它来代替||. 没有魔法。

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

于 2009-09-16T14:35:35.557 回答
7

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

于 2009-09-16T14:38:04.287 回答