問題タブ [initialization-list]

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 投票する
9 に答える
56669 参照

c++ - C++ コンストラクター名に続くコロンは何をしますか?

このコンストラクタでコロン演算子 (":") は何をしますか? と同等MyClass(m_classID = -1, m_userdata = 0);ですか?

0 投票する
16 に答える
45774 参照

python - インスタンス変数を自動的に初期化しますか?

次のようなpythonクラスがあります。

に続く:

C++ の初期化リストのように、これらのインスタンス変数を自動初期化する方法はありますか? 多くの冗長なコードを省くことができます。

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

c++ - C++ 初期化リストとメモリ割り当て

以下は有効ですか?

ctorで指定した順序で初期化が正確に行われると仮定するのは正しいですか? そうでない場合、m_pData の初期化の後に m_nDataLength の初期化が行われるとどうなりますか?

0 投票する
5 に答える
20298 参照

c++ - 初期化リストの利点

初期化リストを使用する利点について私が知っていることは、組み込みではないクラスメンバーを初期化するときに効率が上がることです。例えば、

Fred::Fred() : x_(whatever) { }

よりも好ましい

Fred::Fred() { x_ = whatever; }

x がカスタム クラスのオブジェクトの場合。それ以外は、一貫性を保つために組み込み型でもこのスタイルが使用されます。

これを行うことの最も一般的な利点は、パフォーマンスの向上です。式whateverがメンバー変数x_と同じ型である場合、whatever式の結果はx_内で直接構築されます — コンパイラはオブジェクトの別のコピーを作成しません.

もう 1 つのスタイルでは、別の一時オブジェクトが作成され、この一時オブジェクトが x_ オブジェクトの代入演算子に渡されます。次に、その一時オブジェクトは ; で破棄されます。それは非効率的です。

質問
初期化リストを使用すると、次の例で効率が向上しますか。得はないと思います。最初のバージョンは文字列のコピー コンストラクターを呼び出し、もう一方のバージョンは文字列の代入演算子を呼び出します (作成される一時的なものはありません)。それは正しいですか?

0 投票する
5 に答える
54354 参照

c++ - 親の保護されたメンバーを初期化リストで初期化する (C++)

子クラスのコンストラクターの初期化リストを使用して、親クラスで保護されていると宣言されたデータ メンバーを初期化することは可能ですか? 私はそれを働かせることができません。私はそれを回避することができますが、そうする必要がなければいいでしょう。

サンプルコード:

これを試してみると、コンパイラは「クラス 'Child' には 'something' という名前のフィールドがありません」と教えてくれます。このようなことは可能ですか?もしそうなら、構文は何ですか?

どうもありがとう!

0 投票する
4 に答える
4567 参照

c++ - 初期化リストで例外をキャッチする方法は?

初期化リストで例外をキャッチする方法について質問があります。

たとえば、Barから派生したクラスFooがあります

0 投票する
5 に答える
6681 参照

c++ - C++コンストラクタ初期化リストの奇妙さ

すべてのメンバー変数の前にm_を付けて、クラスを作成するときは常にいい子でした。

しかし、最近私はそれをするのを忘れて、書くことになりました:

信じられないかもしれませんが、コードはエラーや警告なしでコンパイルされ、割り当ては正しく行われました。自分がやったことに気付いたのは、コードをチェックインする前に最終チェックを行ったときだけでした。

私の質問は:なぜ私のコードはコンパイルされたのですか?そのようなものはC++標準で許可されていますか、それとも単にコンパイラが賢い場合ですか?ご参考までに、私はVisualStudio2008を使用していました。

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

c++ - コンストラクタ初期化リスト:C ++入門書のコード、第16章

「C++入門書」の第16章の終わりに向かって、次のコードに遭遇しました(一連の行を削除しました)。

私の問題はSales_item(): h() { }回線にあります。

完全を期すために、私の質問に関連すると思われるHandleクラステンプレートの部分も引用します(Item_baseクラスを表示する必要はないと思います)。

私は次のようなものを期待していました:

a)Sales_item(): h(0) { }これは、著者が前の章で繰り返し使用した規則です。

b)Handle<Item_base>()Handleクラスのデフォルトコンストラクターを呼び出すことが意図されている場合。

代わりに、本が持っているのはですSales_item(): h() { }。私の直感的な反応は、h()が関数宣言に疑わしいほど似ているため、これはタイプミスであるということです。一方、g ++でコンパイルして、このクラスを使用するサンプルコードを実行してみたところ、正しく機能しているようです。何かご意見は?

編集:すべての良い答え、ありがとう!その間に30分間、同じ本の第12章から関連する引用を追跡しました。「クラス型のメンバーを初期化するとき、そのメンバーの型のコンストラクターの1つに渡される引数を指定しています。使用できます。そのタイプのコンストラクターのいずれか。」そして、皆さんが指摘したように、この場合、ゼロの引数を渡します。

0 投票する
7 に答える
32182 参照

c++ - C ++:メンバーポインタをnullに初期化しますか?

次のようなクラスがあります。

に初期化barしたいNULL。これはそれを行うための最良の方法ですか?

また、デストラクタは仮想である必要がありますか?(それが本当なら、コンストラクターも仮想でなければなりませんか?)

0 投票する
4 に答える
6053 参照

c++ - C++ でのプロトタイプ コンストラクターの記述

ここy=ax^2 + bx + ca、 、bcは定数でxあり、変数です。これが私のクラスです:

以下が有効になるように、クラスに 2 つのコンストラクターを作成します。

デフォルトのコンストラクターはゼロに設定する必要がありますが、2 番目のコンストラクターのパラメーターは係数の初期値を示します。

これが私がそうすべきだと私が信じる方法です:

しかし、私はこれを設定する方法を完全には理解していません。