問題タブ [ctor-initializer]

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

c++ - 非静的データ メンバーのメンバー初期化子リストと既定のメンバー初期化子の違いは何ですか?

あるフォームを使用する場合と他のフォームを使用する場合の違いを理解したいと思います (ある場合)。

コード 1 (変数で直接初期化):

コード 2 (コンストラクターの初期化リストを使用した初期化):

セマンティクスに違いはありますか、それとも単なる構文ですか?

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

c++ - コンストラクターの初期化リスト内の「this」ポインター

なぜこれが機能しないのか理解できないと思います。' ' ポインターをコンストラクター内で使用できるとずっと思っていましたが、初期化リストでthis' ' を使用できないことを知りませんでした。this

それに関連する詳細を知りたいです。

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

c++ - ctor 初期化子リストの文字列代入で関数の二重呼び出しを避ける

次のコード例では、std::string A::str_inAの初期化子リストを、関数からの戻り値 ( を返す可能性があるNULL) またはconst char*. しかし、2回呼び出されるのは好きではありませんFunc()

私はこのようなことをしたいと思います:

しかし、一時変数を使用して、寿命を延ばすために参照であっても、この方法では違法に思えます(私の現在の理解によると)。

グローバル/静的変数を使用せずに、1 回だけA::str_呼び出して、初期化子リストでの初期化を可能にする C++03 構文はありますか? Func()一時変数を使用する解決策があれば、その構文を学びたいです。

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

c++ - 仮想継承の内部メカニズム

C++ のサンプル コード:

これは、ダイヤモンド問題の典型的なコード (ソリューション) です。virtual キーワードが使用される理由を認識しています。しかし、コンパイラが問題を処理する内部メカニズムは私にはわかりません。今、私は、以下に述べるように、上記のメカニズムについて2つの異なる理論に出くわしました.

  1. クラスが virtual キーワードで継承されると、コンパイラは派生クラスに仮想ベース ポインターを追加します。派生クラスのサイズを確認しましたが、追加のポインターのサイズが含まれています。しかし、上記の例でクラス A のメンバーがクラス D で参照されている場合、それがどこを指しているのか、どのように機能するのかはわかりません。

  2. コンストラクターごとに、コンパイラーは、プログラマーによって提供された各定義の 2 つのバージョンを作成します。 上記のコードなどで、このリンクから知りました。コンパイラは C のコンストラクタの 2 つのバージョンを生成します

    そして、コンストラクター B の 2 つの異なるバージョン

    したがって、D が構築されると、コンパイラは以下のコードのいずれかを生成します。

    A のインスタンスが 1 つだけ作成されるようにするため、A の重複コピーが回避されます。

内部メカニズムを理解するのを手伝ってください。