には、次のJavaコードの実行を保証する順序はありますか?シーケンスポイント
5
A
答えて
13
はい、そうです。 JLSからのセクション15.7:
Javaプログラミング言語は、オペレータのオペランドが特定の評価順、つまり左から右に評価されているように見えることを保証します。
コードは、この仕様に決定的に依存しないことが推奨されます。コードは、それぞれの式が最大で1つの副作用を含むとき、その最も外側の操作として、そしてコードが左から右の式の評価の結果として生じる例外に正確に依存しないときに、通常より明白です。
は...二項演算子の左側のオペランドは右のオペランドのいずれかの部分が評価される前に完全に評価されるように表示されます。
とも:?
Javaプログラミング言語はまた、すべての条件演算子& &除く演算子のオペランド(、||、および:)は完全に任意の部分の前に評価されるように見えることを保証操作自体の操作が行われます。
+0
あなたは答えを読んで、私はすでにそれを知っていたことを覚えています:) – milan
関連する問題
- 1. シーケンスポイントに対するポストインクリメント
- 2. シーケンスポイントはどこから来ますか?
- 3. 初期化リストのシーケンスポイントの警告
- 4. 関数呼び出しからのシーケンスポイント?
- 5. 副作用、シーケンスポイントと未定義の動作
- 6. シーケンスポイント - アレイ上のXORのスワップは、間違った結果
- 7. C++ 11ではなくC++ 03でコードにシーケンスポイントがある状況はありますか?
- 8. 「int a = 4、* ptr =&a;」のようなステートメントには「シーケンスポイント」の問題がありますか?または "x + = 4、y = x * 2;"
- 9. コンストラクタに適用するときに、括弧内のイニシャライザリストにシーケンスポイントがありますか? n4296のC++標準の文書によれば
- 10. シーケンスポイント間で変数を2回変更することによるUBは、「内部」スコープに継承されますか?
- 11. アドレスの前の引数を使用すると、Sscanfの初期化されていない値
- 12. シーケンスは、左から右の評価順の言語を指していますか?
- 13. なぜprintf( "%d%d%d"、++ i、i、i ++)は未定義の動作ですか?
- 14. + =演算子の連鎖(UBのダッシュ付き)
- 15. 式a^= b^= a^= bにシーケンスポイントがありますか、それとも未定義ですか? <code>^=</code>よう </p> <pre><code>int a = 10; int b = 42; a ^= b ^= a ^= b; /*Here*/ printf("a=%d, b=%d\n", a, b); </code></pre> <p>しかし、私は思ったんだけど、複合代入演算子は次のとおりです。
- 16. Cの完全な宣言子とは何ですか?
- 17. `*です - 私は、このコードのサンプル片について思ったんだけど、C++で(整形)、実際に法的p` 03
- 18. C++定義されていない動作かどうか? (もう一度)
- 19. 同じ呼び出しで%nの値をprintf - 無意味ですか?
- 20. nullptrでストリームのバッファを入れ替えて移動をシミュレートしますか?
- 21. 輪郭の一致 - 輪郭の変位の検出
- 22. C++と関数呼び出しの評価順序
- 23. の操作は未定義ですか?
- 24. 与えられたコードでは未定義の動作ですか?
- 25. MAC OS上でJavaを使用したOpenCVインストールSierra
Javaでは、メソッドが順番に呼び出されることが保証されていますが、CPUは結果に影響を与えない場合、負荷を並べ替えることがあります。たとえば、BがキャッシュにありますがAがそうでない場合、Bがロードを開始する前にAが終了するのを待たずに、結果に影響を与えません。 –
これで面白いです。 2つの機能には、互いに古典的な副作用がありません。 'getA()'が実行に時間がかかることがありますが、 'getB()'はほとんど何もしません。最初のものが返されるとすぐに2番目のものが返されるようにしたいので、順序が重要です。私はもちろんそれを書き換えることができます。 – milan