問題タブ [assignment-operator]
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++でコピーコンストラクタと代入演算子を書くためのチェックリスト
例外の安全性を維持し、メモリリークなどを回避するために、コピーコンストラクタと代入演算子がC++で実行する必要のあるタスクのリストを記述してください。
c++ - 仮想割り当てが同じ署名の他の仮想関数とは異なる動作をするのはなぜですか?
仮想代入演算子の実装で遊んでいる間、私はおかしな振る舞いで終わりました。g ++ 4.1、4.3、およびVS 2005は同じ動作を共有するため、これはコンパイラの不具合ではありません。
基本的に、virtual operator =は、実際に実行されているコードに関して、他の仮想関数とは異なる動作をします。
その結果、仮想演算子=は、実際の派生オブジェクト([1])を介して呼び出されたときに演算子のベースバージョンを呼び出すことにより、同じシグネチャを持つ他の仮想関数とは異なる動作をします([1]と比較して[0])。 )または派生参照([3])は、ベース参照([2])を介して呼び出された場合、または左辺値または右辺値のいずれかがベース参照であり、他の派生参照([4]、 [5])。
この奇妙な振る舞いに対する賢明な説明はありますか?
c++ - C++で基本クラスのコンストラクタと代入演算子を使用するには?
B
一連のコンストラクターと代入演算子を持つクラスがあります。
ここにあります:
D
関数をオーバーライドするだけの継承クラスを作成したいのですがfoo()
、他の変更は必要ありません。
しかし、D
コピーコンストラクターと代入演算子を含むコンストラクターの同じセットが必要ですB
:
でそれらすべてを書き直す必要がありますか、またはのコンストラクタと演算子D
を使用する方法はありますか? のすべてのプライベートメンバー変数B
にアクセスする必要があるため、代入演算子の書き換えは特に避けたいと思います。B
xcode - if文でXcode 3.1コンパイラに代入演算子を警告させるにはどうすればよいですか?
ドキュメントとインターネットをできる限り検索してみましたが、if ステートメントで代入演算子が使用されている場合に Xcode コンパイラに警告を発行させることができませんでした。
私は RealBasic 出身で、この種の比較をタイプする非常に強い習慣があります。
もちろん、C では、その構文は x に値 5 を代入し、結果がゼロでないかどうかをテストします。「正しい」演算子は次のとおりです。
if 比較で割り当てが行われた場合にコンパイラが警告できるはずであるという言及をいくつか見つけましたが、Xcode 3.1/gcc でそれを有効にする方法が見つかりません。オプションを見つけました-pedantic
が、警告が生成されていないようです。
「==」ではなく「=」であることが判明したバグを追跡するのにかなりの時間を 2 回費やしたので、警告の助けが必要です。
代わりにこれを行うことができることを知っています(コンパイラエラーが発生します):
...しかし、それには、根深いコーディングの習慣も変える必要があります。不器用で後ろ向きに見えることは言うまでもありません。
ありがとう!
c++ - operator= とコピー コンストラクターの間のコードの重複を減らす
デフォルト以外のコピー コンストラクターと代入演算子 (ポインターのリストを含む) を必要とするクラスがあります。コピー コンストラクターと代入演算子の間のコードの重複を減らす一般的な方法はありますか?
c++ - Is it bad form to call the default assignment operator from the copy constructor?
Consider a class of which copies need to be made. The vast majority of the data elements in the copy must strictly reflect the original, however there are select few elements whose state is not to be preserved and need to be reinitialized.
Is it bad form to call a default assignment operator from the copy constructor?
The default assignment operator will behave well with Plain Old Data( int,double,char,short) as well user defined classes per their assignment operators. Pointers would need to be treated separately.
One drawback is that this method renders the assignment operator crippled since the extra reinitialization is not performed. It is also not possible to disable the use of the assignment operator thus opening up the option of the user to create a broken class by using the incomplete default assignment operator A obj1,obj2; obj2=obj1; /* Could result is an incorrectly initialized obj2 */
.
It would be good to relax the requirement that to a(orig.a),b(orig.b)...
in addition to a(0),b(0) ...
must be written. Needing to write all of the initialization twice creates two places for errors and if new variables (say double x,y,z
) were to be added to the class, initialization code would need to correctly added in at least 2 places instead of 1.
Is there a better way?
Is there be a better way in C++0x?
#xA;Output:
#xA;Alternative Copy Constructor:
#xA;c++ - パブリック代入演算子を持つプライベート コピー ctor がある場合のエラー
次のコードがコンパイルされない理由を説明できますか?
私が受け取るエラー:
注: private:キーワードを削除すると、コードはコンパイルされますが、コピー ctor は呼び出されません。では、プライベートの場合にエラーになるのはなぜですか?
それが重要かどうかはわかりませんが、私は使用しています:
c++ - ネストされたテンプレートのoperator=(T * r)
ネストされたテンプレートと代入演算子のオーバーライドに関して問題があります。refcountingクラスtemplate_referenceが必要だとします。今のところ、この_referenceは、ref-countedオブジェクトへのポインターを保持しているだけです。問題は、単純なクラスまたは構造体でこれを実行している限り、これがすべて正常に機能することです。例えば。_参照 ...、
しかし今、私はそれが保持するクラスを転送するstd-vectorへの参照であるクラステンプレートを作りたいと思います。
いや、私はコードを投稿するだけです:(それは今のところrefcountingとそのようなものをしません、それは私が持っている問題の抽出だけです)
MSVC-エラー:
GCC-エラー:
では、simplySetIt-関数が機能するのに、代入演算子がここで機能しない理由を誰かに説明してもらえますか?
r - Rの"="と"<-"代入演算子の違いは何ですか?
=
代入演算子と<-
Rの違いは何ですか?
この例が示すように、演算子が少し異なることを私は知っています
しかし、これが唯一の違いですか?
c# - 文字列が長すぎると、C# += (plus equals) (加算による代入) の動作が非常に遅くなりますか?
for ループがあり、私がしているのはこれです。
この forloop では、コードが非常に長く続きます。おそらく 1 分以上かかります。どうすればこの問題を解決できますか?
ありがとう。