問題タブ [compound-assignment]

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.

0 投票する
3 に答える
639 参照

java - Javaでの複合代入がオーバーフローの問題をキャッチしないのはなぜですか?

驚いたことに、次のコードは警告なしでコンパイルされることがわかりました。

予想どおり、これによりコンパイル時エラーが発生します。

私はそれを調べました、そして確かに、JLS(セクション15.26.2)はこれを言っています:

E1 op = E2の形式の複合代入式は、E1 =(T)((E1)op(E2))と同等です。ここで、TはE1のタイプですが、E1は1回だけ評価されます。

これは私にはばかげているようです。なぜ彼らはここで明示的にキャストする必要性を感じたのですか?とにかく自動型変換が拡大を処理したようであり、このように自動的に縮小すると、整数のオーバーフローが発生することがほぼ保証されます。

0 投票する
2 に答える
13624 参照

c# - C# に ||= または &&= 演算子がないのはなぜですか?

すべての論理演算子、シフト演算子、加法演算子、およびすべての乗法演算子に相当する代入演算子があります。

論理演算子が除外されたのはなぜですか? それが難しい理由は技術的な理由ですか?

0 投票する
3 に答える
116 参照

c# - _retがtrueと評価されるのはなぜですか、falseと評価されるべきではありません(ビット演算子)?

私たちが開発しているより大きなアプリケーションでこの問題に遭遇し、それが期待される機能であるかどうか疑問に思いましたか?これは、Visual Studio 2010でC#で記述されています

0 投票する
1 に答える
246 参照

lua - Lua mutate 割り当てパッチはどのように機能しますか?

このページをたどり、メタメソッド __mutate_asn を取得しました。これは私のテストコードです。

出力: 1 2 1 "a" は変更されません。

0 投票する
1 に答える
1817 参照

c++ - C++ 複合リテラル

Cではこれを行うことができます:

ただし、C++ では構文エラーが発生します。GNUg++コンパイラを使用しています。これを有効にするスイッチはありますか?

0 投票する
3 に答える
1546 参照

python - python / セット / 辞書 / 初期化

このビットのコードがどのように機能するかを理解するのに役立つ人が説明できますか? 特に、myHeap 割り当てがどのように機能するか。freq 変数が辞書として割り当てられていることは知っています。しかし、私の myHeap はどうでしょうか? セットですか?

0 投票する
2 に答える
11436 参照

c++ - 複合代入と演算子オーバーロードの追加

以下に示す両方の演算子のオーバーロード関数について助けが必要です。関数定義で代入を実際に使用せずにこれを実装する方法がわかりません。

.cpp ファイルの演算子 + のコード:

.cpp ファイルの += 演算子のコード:

main.cpp からの呼び出し:

私の .cpp ファイル コードが間違っていることはわかっています。

0 投票する
3 に答える
180 参照

c++ - MySet(20,100) = "abcd"; コピーおよび/または割り当て?

この答えが明らかである必要がある場合はお詫びします。おそらくこれには「ドープ割り当てオーバーロード」のようなパターン名があり、適切なトピックで検索されていません-最も歓迎されるコード抽出をリダイレクトします:

A と B の代入は機能しますが、C の場合は g++ 泣き言を言う....: myset.cxx:19:16: エラー: 期待される ',' または ';' 「=」トークンの前

は大きな問題ではありませんが、なぜ無効なのかを理解しようとしています。

役に立つ返信をありがとう。

詳細... 私の操作を編集するためのものだと思いますか?

上記が違法と見なされる理由を突き止めて、決定的な理由を探していました...そしてもちろん、そのような表記法をコンパイラーに受け入れさせるためのトリック.

合法的な同様の使用を検討する

次のように、数十年の C コンパイラから動作します。

すべて c++ コンパイラによって尊重されます。構造体にメンバー関数を含めることができ、引き続き機能します。

コンストラクターを追加すると、反対意見が始まります。

コンパイラーがコンストラクターと一致できるように、適切な初期化子を使用することが問題になるのではないかと考えています

追加

許可します

だがしかし

これが長い投稿になってしまったことをお詫びしますが、コンストラクターと割り当てが拒否される理由と、これに対応できるかどうかについてのアイデアを探しています。

MySet の表記法では、これはおなじみのステートメントになりますが、違法であると宣言する前に、トリックがないかどうかを確認したかったのです。

ありがとう。

0 投票する
1 に答える
506 参照

javascript - JavaScriptでの複合代入演算子の連鎖

C#では、

書き込みabcabcabc(http://ideone.com/pFNFX2)。C#仕様では、セクション7.16.2で次のように明示的に記述されているため、これは問題ありません。

xが1回だけ評価されることを除いて、操作はx = xopyとして評価されます。

ただし、ECMAScript 5.1言語仕様のセクション11.3.2にある複合代入演算子の説明を読んでいると、この演算子のセマンティクスにそのような「1回だけ」の修飾子がありません。代わりに、私が見るのは次のとおりです。

  1. lrefをLeftHandSideExpressionの評価結果とします。
  2. lvalをGetValue(lref)とします。
  3. rrefをAssignmentExpressionの評価結果とします。
  4. rvalをGetValue(rref)とします。
  5. rをlvalとrvalに演算子@を適用した結果とします。
  6. 次の条件がすべて当てはまる場合は、SyntaxError例外をスローします。(snipped)
  7. PutValue(lref、r)を呼び出します。
  8. rを返します。

したがって、(とにかく)次のJavaScriptコードが表示されます

警告abcabcabcabcしますが(括弧で囲まれた式の7行目のPutValueのため)、とにかくChrome22では警告しabcabcabcます。

だから私の質問は:私は仕様を読み間違えているのか、それともChrome(V8はおそらく?)が独自のことを仕様外で行っているのか?

0 投票する
3 に答える
631 参照

programming-languages - a=bの複合代入演算子はありますかa(ここで可換ではありません)?

多くの言語では、a = a+bはa+= bと書くことができます。数値演算の場合、a+bはb+aと同じであるため、単一の複合演算子で十分です。

また、a = a--bはa-=bと書くことができます。

ただし、abはbaと同じではありません。したがって、複合代入演算子はa=b-aに対しては機能しません。

それで、演算a = b op aopは+、-、*、/、%、および順序が重要になる可能性があります)の複合代入演算子はありますか?

[非可換演算]