エディターの余分なスペース以外に、2つのステートメントに違いはありますか?
編集:答えてくれてありがとう。また、各ステートメントがコンパイラーによってどのように評価されるかを知りたいです。
エディターの余分なスペース以外に、2つのステートメントに違いはありますか?
編集:答えてくれてありがとう。また、各ステートメントがコンパイラーによってどのように評価されるかを知りたいです。
いいえ-POD以外の場合、オペレーターが過負荷になる可能性があります。
合理的な実装によってこれらの操作が同じになることを期待しますが、それは開発者次第であり、コンパイラーによって強制されることはありません。
(A==B)
と同じではないような演算子をオーバーロードすると、さらに微妙な問題が想像できます(B==A)
。
はい、違いがあります。Forward Iteratorsなどの一部のオブジェクトは、インクリメント演算子(x++
および++x
)を定義しますが、定義しませんoperator+=
。のような一部のオブジェクトはstring
定義しますoperator+=
が、インクリメントしません。ただし、一般に、、、およびがすべて定義されている場合x += 1
、それらは同じことを行います。++x
x++
PODの場合でも、まったく同じではありません。違いは些細なことですが、役立つコンパイラライターは後者について警告するかもしれませんが、前者については警告しないかもしれません。
char ch = get_a_character();
++ch;
ch = ch + 1; // narrowing conversion
はい、それらは同一です。コンパイラが両方に対して同じコードを生成する可能性が高いです。
もちろん、一方または両方の演算子がオーバーロードされていない限り。これが、オペレーターのオーバーロードに眉をひそめる人がいる理由です。