問題タブ [post-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++ - ポストインクリメントi++はいつ実行されますか?
重複の可能性:
未定義の動作とシーケンスポイント
マシンコードレベルのC++では、postincrement ++演算子はいつ実行されますか?
優先順位の表は、postfix ++演算子がレベル2であることを示しています。これは、
接尾辞++は最初に実行されます。
ただし、この行の論理演算は、加算が最初に行われる(0 + 0)ように見えますが、それはどのように行われますか?
私が想像するのは次のとおりです。
したがって、他のオプションは、x++がx+ xよりも優先順位テーブルで高いにもかかわらず、x++によって生成されたコードが加算演算の下に挿入されることです。
この2番目のオプションの方が理にかなっているようですが、ここでの操作の順序に興味があります。具体的には、xはいつ変化しますか?
javascript - クロージャーコンパイラ-a++>=3は++a>3になることができますか?
数日前にClosureCompilerが一見短縮できるように見える特定のコードを短縮しない理由について質問したことは認めますが、その理由はこの場合には当てはまらず、なぜ短縮されないのかよくわかりません。ここ。
私が持っているコードは次のとおりです。
現在、プリインクリメントとポストインクリメントがあります。違いは戻り値です-それをa++
返しa
、次にそれをインクリメントし、++a
最初にそれをインクリメントしてa
からそれを返します。
これは、私のコードを(空白の削除を無視して)次のように短縮できるということです。
ただし、ClosureCompilerはこれを変更(または認識)していないようです。
++a >
したがって、私の質問は、代わりに使用した場合にどのような副作用が発生する可能性があるa++ >=
かということです。
c++ - ポスト インクリメント演算子をオーバーロードすると、引数の値が 0 になる
現在の位置を内部的に維持するオブジェクトのリストを保持するオブジェクトを作成したので、これは、境界チェックでこの内部位置を効果的にインクリメントする前後のインクリメント演算子をオーバーロードするのに最適な場所であると考えました。
私が気づいたのは、++
オブジェクトを呼び出すと、引数が0
.
テストコード:
これは を返します0 0 1 10
。私が理解していることから、これは正常な動作です。だから、それは私がどのようにoperator++
働くべきかを再考させました。以前は、++
境界チェックに合格した場合に内部位置変数を呼び出すだけでした。ただし、これには、入力引数が何であれ、1 ずつインクリメントする効果があります。次に、+=
引数n
を右辺として使用することを考えましたが、お気づきのよう++
に、演算子を使用せずに呼び出すだけでは (慣例のように)、0 が返され、位置はインクリメントされません。
基本的に、これは私が心配する必要があるものですか?もしそうなら、ユーザーが本当に 0 を望んでいたかどうか、またはデフォルトの動作 ( a++
) が意図されたものであり、1 ずつインクリメントする必要があるかどうかをどのように検出しますか?
c - C:ポインタの混乱
私はこれが基本的なものの一部であることを理解していますが、私は立ち往生しています:-(誰かが私を助けてくれますか?
プログラム1:
出力にエラーがあるのはなぜですか?左辺値が必要ですか?
プログラム2:
出力が空の文字列であるのはなぜですか?そして、インクリメントの順序を逆にすると、つまりwhile(++*p2=++*p1);
、左辺値エラーが発生するのはなぜですか?
java - The difference between ++Var and Var++
In programming, particularly in Java, what is the difference between:
and
What repercussions would this have on a for loop?
e.g.
c++ - 後置 ++/-- 演算子の非効率性は STL イテレータ用に最適化されますか?
インクリメント/デクリメント演算子の後置バージョンは、通常、組み込み型用にコンパイラによって最適化される (つまり、コピーは作成されない) ことは知っていますが、これはiterator
s の場合ですか?
それらは本質的にオーバーロードされた演算子であり、さまざまな方法で実装できますが、それらの動作は厳密に定義されているため、最適化できますか?もしそうなら、それらは任意/多くのコンパイラによって行われますか?
c++ - 接尾辞演算子のオーバーロード順序
重複の可能性:
未定義の動作とシーケンスポイント
接尾辞演算子をオーバーロードするときのアクションの順序を理解するのに問題があります。以下の2つの小さな例を見てみましょう。
2つの非常に異なる動作が発生します。出力は次のとおりです。
異なる振る舞いですね。これが私のオーバーロードされた演算子メソッドの概要です。
大丈夫。プレフィックスは理にかなっています。必要なものは何でもインクリメントしてから、割り当ての場合に変更された同じオブジェクトを返します。しかし、接尾辞は私をつまずかせるものです。割り当ててからインクリメントすることになっています。ここでは、自己割り当てを行っています。したがって、組み込みの整数型を使用すると、それは理にかなっています。i
の値をそれ自体に割り当ててから、i
インクリメントします。けっこうだ。MyClass
しかし、intのレクリエーションだとしましょう。0から始まり、プレフィックスがインクリメントされて1になります。次に、キーライン。 myObject = myObject++
。それはと同じことですmyObject = myObject.operator++(int postfixFlag)
。呼ばれます。 myTemp
値1で初期化されます。2にインクリメントされます。次に、tempを返します。別のオブジェクトに割り当てる場合は、これで機能します。しかし、ここでは自己割り当てしているので、2にインクリメントした後myObject
は初期値で初期化された戻り値の一時オブジェクトと等しく設定され、1に戻ります。それは理にかなっている。しかし、それは根本的に異なる振る舞いです。
どうすれば回避できますか?intはどのようにそれを行いますか?このメソッドは一般的にどのように記述されていますか?これに関連するC++の動作と設計についてコメントはありますか?等本やオンラインの例は常に上記の方法の変形を使用しているように見えるので、私は今少し困惑しています。
読んでくれてありがとう、そしてどんな入力でも大歓迎です!
c# - C# での奇妙なインクリメント動作
注:以下のコードは本質的に無意味であり、説明のみを目的としていることに注意してください。
割り当ての右側は、その値が左側の変数に割り当てられる前に常に評価される必要があり、およびなどのインクリメント操作は常に評価の直後に実行されるという事実に基づいて++
、--
次のことは期待できません。動作するコード:
むしろ、 をスローするところまで、、などnewArray1[0]
に割り当てられることを期待します。代わりに、驚いたことに、例外をスローするバージョンはnewArray2[1]
newArray1[1]
newArray[2]
System.IndexOutOfBoundsException
私の理解では、コンパイラは最初に RHS を評価し、それを LHS に割り当ててからインクリメントするため、これは予期しない動作です。それとも本当に期待されていて、明らかに何かが欠けていますか?
c++ - C++ で文字をループすると予期しない結果が生じる
私は本「C++ を使用したプログラミングの原則と実践」を使用してプログラミングを学習しています。演習の 1 つは、while ループを使用して文字 az をループすることです。
今、私は以前に C++ や他の言語でプログラミングしたことがあるので、(while ループを使用しながら) できるだけ少ない行数を使用することにしました。ただし、これには、出力がめちゃくちゃになるという代償が伴いました。
コード:
出力:
今では、代わりに for ループを使用してこれを行うことができたことに気付きました。しかし、私はまだこのコードの何が問題なのか理解できず、本当にイライラしています。
「a」を出力するはずの場所に「b」を出力するため、「ch + 1」を出力するように指示したように見えます。インクリメントは、ch の整数値がアウトストリーム (ポストインクリメント) に入れられるまで行われません。以前にインクリメントしていたとしても、少なくとも印刷された文字とその整数値は対応しているはずです。
このコードが機能しない理由について何か考えはありますか?