私は最近読んだ:「式(++ i)と(i ++)には値と副作用があります。副作用はiの値が1増加することです。(i ++)の値は増分前の値であり、 (++ i)の値は増分後の値ですが、増分または評価が最初に行われるかどうかは、Cの一部ではありません。」
評価ステップが最初にJavaで行われることを知っています...他のすべての言語でも同じですか?
私は最近読んだ:「式(++ i)と(i ++)には値と副作用があります。副作用はiの値が1増加することです。(i ++)の値は増分前の値であり、 (++ i)の値は増分後の値ですが、増分または評価が最初に行われるかどうかは、Cの一部ではありません。」
評価ステップが最初にJavaで行われることを知っています...他のすべての言語でも同じですか?
少なくともC++では、演算子はオーバーロードされる可能性があるため、++i
およびのセマンティクスi++
は保証されません。実際、演算子はオーバーロードされて非常に異なることを実行でき、増分とは関係のないことを実行することもできます。したがって、あなたの質問に対する答えは、いいえです。少なくとも1つの言語では、++
クラスの接尾辞と接頭辞の演算子は、プログラマーが望むことを何でも実行できます。
しかし、誰かがそれを行うことができるという理由だけで、それは彼らがすべきだという意味ではありません。インクリメント前とインクリメント後の演算子は非常によく知られているセマンティクスを持っているので、(まともな)C ++プログラマーはそれに違反しないように努め、それらを使用するコードが最も驚かないようにします。
C ++での演算子のオーバーロードの良い例は、STLイテレーターです。リンクリストのようなコンテナへのイテレータは、ポインタを模倣するようにプリインクリメント演算子とポストインクリメント演算子をオーバーロードするクラスを定義します(C ++のイテレータは実際にはポインタの一般化です)。