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 に答える