タグ付けされた質問 「assignment-operator」

11
Javaの+ =、-=、* =、/ =複合代入演算子がキャストを必要としないのはなぜですか?
今日まで、私は例えばそれを考えました: i += j; のショートカットでした: i = i + j; しかし、これを試してみると: int i = 5; long j = 8; その後i = i + j;はコンパイルされませんi += j;が、正常にコンパイルされます。 それは実際にi += j;はこのようなものへのショートカット であることを意味しi = (type of i) (i + j)ますか?


5
コピーアンドスワップイディオムとは何ですか?
このイディオムとは何ですか?いつ使用する必要がありますか?どの問題を解決しますか?C ++ 11を使用するとイディオムは変わりますか? 多くの場所で言及されていますが、「それは何か」という単一の質問と回答はありませんでした。これは以前に言及された場所の部分的なリストです: 好きなC ++コーディングスタイルのイディオムは何ですか:コピースワップ C ++でのコンストラクターと=演算子のオーバーロードのコピー:一般的な関数は可能ですか? コピーエリクションとは何か、そしてそれがコピーアンドスワップイディオムをどのように最適化するか C ++:オブジェクトの配列を動的に割り当てる?


2
data.tableが別のdata.tableの(対コピー)への参照であるときを正確に理解する
の参照渡しプロパティを理解するのに少し問題がありdata.tableます。いくつかの操作は参照を「壊す」ようであり、私は何が起こっているのかを正確に理解したいと思います。 data.table別のからを作成するとdata.table(を介し<-て新しいテーブルをで更新する:=と、元のテーブルも変更されます。これは、次のように予想されます。 ?data.table::copy およびstackoverflow:pass-by-reference-the-operator-in-the-data-table-package 次に例を示します。 library(data.table) DT <- data.table(a=c(1,2), b=c(11,12)) print(DT) # a b # [1,] 1 11 # [2,] 2 12 newDT <- DT # reference, not copy newDT[1, a := 100] # modify new DT print(DT) # DT is modified too. # a b # [1,] 100 11 …


8
Javaのショートカット「or-assignment」(| =)演算子
私はJavaで実行する比較の長いセットを持っています、そしてそれらの1つ以上が本当であるかどうか知りたいのですが。比較の文字列は長くて読みにくいので、読みやすくするために分割し、|=ではなく自動的にショートカット演算子を使用しましたnegativeValue = negativeValue || boolean。 boolean negativeValue = false; negativeValue |= (defaultStock < 0); negativeValue |= (defaultWholesale < 0); negativeValue |= (defaultRetail < 0); negativeValue |= (defaultDelivery < 0); negativeValuedefault <something>値のいずれかが負の場合、私はtrueになると期待しています。これは有効ですか?それは私が期待することをしますか?Sunのサイトやstackoverflowで言及されているのを確認できませんでしたが、Eclipseには問題がないようで、コードがコンパイルされて実行されます。 同様に、いくつかの論理的な交差を実行したい場合、&=代わりに使用でき&&ますか?

8
割り当てられた値ではなく、ユニットに評価されるScala割り当ての動機は何ですか?
割り当てられた値ではなく、ユニットに評価されるScala割り当ての動機は何ですか? I / Oプログラミングの一般的なパターンは、次のようなことです。 while ((bytesRead = in.read(buffer)) != -1) { ... しかし、これはScalaでは不可能です... bytesRead = in.read(buffer) .. bytesReadの新しい値ではなく、Unitを返します。 関数型言語から除外するのは興味深いことのようです。なぜそうなったのかしら?

12
Javaに条件演算子と条件演算子の複合代入バージョンがないのはなぜですか?(&& =、|| =)
だから、ブール型の二項演算子のために、Javaがあり&、|、^、&&と||。 ここで彼らが何をしているのかを簡単に要約しましょう: JLS 15.22.2ブール論理演算子&、^、および| JLS15.23条件付き-および演算子&& JLS15.24条件付きまたは演算子|| の場合&、結果値はtrue、両方のオペランド値がtrue;の場合です。それ以外の場合、結果はfalseです。 の場合|、結果値はfalse、両方のオペランド値がfalse;の場合です。それ以外の場合、結果はtrueです。 の場合^、結果値はtrue、オペランド値が異なる場合です。それ以外の場合、結果はfalseです。 &&オペレータは次のようである&が、その左側の値がオペランドその右側のオペランドた場合にのみ評価されますtrue。 ||オペレータは次のようである|が、その左側の値がオペランドその右側のオペランドた場合にのみ評価されますfalse。 現在、5つすべてのうち、3つには複合代入バージョン、つまり、、|=が&=あり^=ます。だから私の質問は明白です:なぜJavaは提供しません&&=と||=同様?必要以上に必要だ&=と思います|=。 そして、「長すぎるから」というのは良い答えではないと思います。Javaには>>>=。この省略にはもっと良い理由があるに違いありません。 15.26代入演算子から: 12個の代入演算子があります。[...]= *= /= %= += -= <<= >>= >>>= &= ^= |= &&=と||=が実装された場合、最初に右側を評価しないのはそれだけであるというコメントがありました。複合代入演算子が最初に右側を評価するというこの概念は間違いだと思います。 15.26.2複合代入演算子: フォームの複合代入式は、E1 op= E2と同等ですE1 = (T)((E1) op (E2))。ここTで、はのタイプですがE1、E1評価されるのは1回だけです。 証拠として、次のスニペットは、NullPointerExceptionではなく、をスローしArrayIndexOutOfBoundsExceptionます。 int[] a = null; int[] b = {}; a[0] += b[-1];

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.