0

エディターの余分なスペース以外に、2つのステートメントに違いはありますか?

編集:答えてくれてありがとう。また、各ステートメントがコンパイラーによってどのように評価されるかを知りたいです。

4

4 に答える 4

6

いいえ-POD以外の場合、オペレーターが過負荷になる可能性があります。

合理的な実装によってこれらの操作が同じになることを期待しますが、それは開発者次第であり、コンパイラーによって強制されることはありません。

(A==B)と同じではないような演算子をオーバーロードすると、さらに微妙な問題が想像できます(B==A)

于 2012-12-10T22:23:44.577 に答える
0

はい、違いがあります。Forward Iteratorsなどの一部のオブジェクトは、インクリメント演算子(x++および++x)を定義しますが、定義しませんoperator+=。のような一部のオブジェクトはstring定義しますoperator+=が、インクリメントしません。ただし、一般に、、、およびがすべて定義されている場合x += 1、それらは同じことを行います。++xx++

于 2012-12-10T22:31:37.513 に答える
0

PODの場合でも、まったく同じではありません。違いは些細なことですが、役立つコンパイラライターは後者について警告するかもしれませんが、前者については警告しないかもしれません。

char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
于 2012-12-10T23:31:43.567 に答える
-1

はい、それらは同一です。コンパイラが両方に対して同じコードを生成する可能性が高いです。

もちろん、一方または両方の演算子がオーバーロードされていない限り。これが、オペレーターのオーバーロードに眉をひそめる人がいる理由です。

于 2012-12-10T22:23:45.387 に答える