問題タブ [pre-increment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cのポストインクリメントおよびプレインクリメント演算子
kがインクリメントされないのに、iとjが同じ式でインクリメントされるのはなぜですか。また、プログラムの出力を知りたいのですが、出力は-2 310として取得されます。
pre-increment - プレインクリメント演算子
プログラムの出力が「34」ではなく「44」であるのはなぜですか?
c# - ++演算子がオーバーロードされているときに、++fooとfoo++に違いがないのはなぜですか?
重複の可能性:
ポストインクリメント演算子のオーバーロード
なぜPostfix ++ / —がC#のプライマリ演算子として分類されるのですか?
++
と--
演算子をオーバーロードできることを確認しました。通常、これらの演算子は2つの方法で使用します。intのインクリメント/デクリメントの前後の例:
ただし、演算子のオーバーロードに関しては、状況が少し異なります。
私の質問は、これらの最後の2行が同じものを出力するのはなぜですか?さらに具体的には、(2つの)最初の行が出力されるのはなぜflying
ですか?
解決策は、演算子のオーバーロードを次のように変更することです。
c++ - 右辺値を確実にプレインクリメント/デクリメントできますか?
たとえば、std::vector<int>::iterator it = --(myVec.end());
. これは GCC 4.4 で動作しますが、移植性がないという噂を耳にしました。
c# - 予期しない言語の動作 i++
私は次のことをしようとしました
i
途中で増加していることを発見
私が最終的に増加を追加するだろうと思ったときi
:
i++
C#でどのように機能するかについての説明を見つけられる人はいますか?
c - インクリメント演算子での左辺値の問題
このコードをコンパイルすると、ステートメント1でl値が必要なエラーが発生します。これは理解できます。同じことをするつもりなのに、ステートメント2でエラーが発生しないのはどうしてですか?誰かが光を当てることができますか?
php - echo ++$a + $a++ の出力はどうあるべきか
PHP マニュアルのoperator precedence sectionに、次の例があります。
次の理由により、動作が未定義であることを理解しています。
x + y = y + x
インタプリタは、速度やメモリを最適化するために、任意の順序で自由に評価および追加できるためですx
。この記事の C コードの例y
を見て、これを結論付けました。
4
私の質問は、式と部分式がどのように評価されても、上記の PHP コードの出力は次のようになるべきだということです。
- op1 = ++$a => $a = 2, op1 = 2; op2 = $a++ => op2 = 2, $a = 3; 2 + 2 = 4
- op1 = $a++ => op1 = 1, $a = 2; op2 = ++$a => op2 = 3, $a = 3; 1 + 3 = 4
5はどこから?または、オペレーターの仕組みについてもっと学ぶ必要がありますか?
編集:
Incrementing/Decrementing Operatorsセクションを見つめてきましたが、なぜ 5.
++$a: プリインクリメント -- $a を 1 インクリメントしてから、 $aを返します。
$a++: Post-increment -- $a を返し、$ a を 1 ずつ増やします。
c - 式"j= ++(i | i);およびj = ++(i&i);は左辺値エラーである必要がありますか?
私は次のコードでそれを期待していました:
式j = ++(i | i);
とj = ++(i & i);
は、次のように左辺値エラーを生成します。
しかし、以下のように、上記のコードが正常にコンパイルされたことに驚きました。
上記のコードが正しく機能していることを確認してください。
他の演算子はエラーを生成しますが(私が理解しているように)。ビット演算子XORでさえエラーの原因になります(他の演算子がコンパイル時に左辺値エラーを生成することをj = ++(i ^ i);
確認してください)。
理由は何ですか?これは未指定ですか、それとも未定義ですか?またはビット単位のORAND演算子は異なりますか?
コンパイラバージョン:
しかし、コンパイラのバージョンが不均一な動作の理由になるべきではないと私は信じています。コンパイルされていない場合^
は、コンパイルされ|
て&
いません。そうでなければ、すべてのために働くはずです
c99モードのこのコンパイラではエラーではありません:gcc x.c -Wall -std=c99
。
java - forループでの前後のインクリメント
Javaのforループでプリインクリメントとポストインクリメントを行う方がパフォーマンスが優れていますか?
サンプルコード:
と
プレインクリメントを行うと、ポストインクリメントを行う場合よりも実行時間が短くなることに気付きました。なぜこれが当てはまるのかについての提案はありますか?ありがとう。
c - Cコード。整数変数の値があり、事前インクリメント操作の後に出力を取得する必要があります
説明付きで出力してください。
私が得ている答えは12ですが、 13である必要があります。