インクリメント演算子とデクリメント演算子の再バージョンとポストバージョンを個別にオーバーロード可能にする理由を見つけようとしています。
私の考えでは、そして私がこれまでに見たあらゆるタイプのクラスのこれらの演算子のすべての実装において、これらは同じ演算子 (= 同じことを行う) であり、呼び出されるタイミングが異なるだけです。C++ の設計者が1 つの演算子を持っていて、値を読み取る前または後に (または、より可能性が高いのは、前または次のシーケンス ポイントで) 必要に応じてコンパイラがそれを呼び出すことは、
私にははるかに論理的に思えます。同等だと思います) ++
したがって、質問は次のとおりです。これらが同じように実装されていない可能性のあるケース/クラスの例を誰かが持っていますか? または、この設計の選択の背後にある理論的根拠を知っている/推測している人はいますか?
質問でテキストを読むよりもコードを見ることを好む人のために、ここに要約があります:
次の 2 行が同じ副作用を持たないのは、どのタイプT
(必要なものを表すユーザー定義のクラス) の場合に意味がありますか。
T v;
v++;
++v;
EDIT
以下の @Simple のコメントを引用すると、質問が明確になることを願っています。
コンパイラがコピー自体を実行して事前インクリメントを実行できる場合、言語にポストインクリメント (オーバーロード) がある理由
EDIT 2
質問は明らかに多くの人にとって不明確であるため、別の説明を次に示します。
次の 2 行を考えてみましょう。
b = a++;
b = ++a;
それが 1 つの演算子の場合 (引数のために、演算子 +a+ と呼びます)、最初の行はコンパイラによって次のように変換されます。
b = a;
+a+;
そして2番目に
+a+;
b = a;