-1

次のコードは悪いと思いますが、警告なしでコンパイルできます。

int f(int n)
{
    return n + 1;
}

int n = 0;
n = f(n++) + f(++n);

聖なる基準がそのような演算子を非推奨にしないのはなぜだろうか?

以下の2つの理由が考えられます。

下位互換性のためのものかもしれません。

場合によっては、これらの演算子が非常に便利な場合もあります。

後者の場合、いくつか例を挙げていただけますか? ありがとう。

4

3 に答える 3

7

それは悪いことではなく、Undefined Behaviour™ です。これが、すべての正気な人々がそのような使用を禁止する理由です。

下位互換性は確かに問題の半分です-インクリメントとデクリメントはどこでも使用されています. また、イテレータなどにも役立ちます。

要するに、C++ は、あなたが自分の足で撃つことを止めたことは一度もありません。これはほんの一例です。C++ は、悪い可能性があるという理由だけで、良い可能性があるものを禁止しません。それらを悪用しないことがあなたの問題です。

于 2013-09-19T14:33:00.113 に答える