問題タブ [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.
c++ - C++ で別のコンストラクターからコンストラクターを呼び出す際のエラー
struct A
初期化されたさまざまなデータメンバーを持ついくつかのコンストラクターを持つ があります。
私が取得custom_type
するエラーは、 say でインスタンス化したときに発生します。エラーは、
type A<custom_type> is not direct base of A<custom_type>
別のコンストラクター内で呼び出すコンストラクターを強調表示しています。C++11 を使用しています。どうしたの?
c++ - コンストラクタ本体の前に例外をスローして構築を防止する
C++
独自のメンバー関数を使用して構築を防ぐことによりthrow
、コンストラクターの本体の開き中括弧の前にクラスを例外にしたいと考えています。任意に選択された戻り値のない型と、その戻り値の型に一致する型を持つダミー データ メンバーを使用して、無条件に例外を発生{
させることだけを目的とするメンバー関数を定義しました。コンストラクター初期化子リストの上記のメンバー関数。これは機能しますが、非おもちゃのクラスでは、ダミー変数はメンバー関数を実行するための言い訳をする以外の目的を果たさず、メンバー関数の非throw
void
throw
void
戻り値の型は、同じ型のダミー データ メンバーのコンストラクターによって呼び出し可能になるための言い訳をする以外の目的はありません。
このおもちゃはコンパイルできますが、エレガントではありません:
コンソール出力:
{
ダミー変数がなければ、コンストラクタ本体の開き中括弧の前に例外をスローする方法はありますか?
c++ - クラスのコンストラクター初期化子に std::array を設定する
std::array
クラスのコンストラクタ初期化子に値を設定する方法はありますか?
今、私はそれを長い道のりに投入しています:
-編集 -
Visual Studio 2010 では、c++11 が完全にサポートされていません (まだ std::array がstd::tr1::array
名前空間の typedef としてリストされています!)。
試行には次のものが含まれます。
VS2010ではどれも機能しません。それらはすべてエラーを報告します:
c++ - 基本クラスのコンストラクターでunique_ptrを適切に初期化する
継承されたクラスにを渡そうとするとstd::unique_ptr
、それが基本クラスのコンストラクターに転送されます (コンストラクターの初期化リストを使用)。基本クラスのコンストラクターが default-object を受け取った場合、構築して、基本クラスのメンバー変数nullptr
に割り当てる必要があります。しかし、どこstd::unique_ptr
からでも任意の要素にアクセスしようとすると、どういうわけか AccessViolation が発生します(現時点ではそれが不可能な場合でも、何らかの理由でまだです)。std::unique_ptr
nullptr
ここで何がうまくいかないのですか?
c++ - コンストラクターでの const フィールドの初期化
C++ の const フィールドは、初期化リストで初期化する必要があります。これにより、コンストラクター パラメーターからの相互依存値の計算が簡単ではなくなります。
たとえば、この Java コードを c++ に変換する最良の方法は何ですか?
サブオブジェクトを SomeObject にカプセル化することを考えましたが、これは問題をシフトしているだけです。または静的メソッドを使用してオブジェクトを構築します。
より良い解決策はありますか?
ありがとうございました。
c++ - C++ では、依存関係がある場合、初期化子リストで合成されたオブジェクト コンストラクターの順序をどのように強制する必要がありますか?
相互依存関係を持つ他のオブジェクトを合成するクラスがある場合、(どのように) 構築順序を強制する必要がありますか?
例えば
Child2 のコンストラクターが Child1& を必要とし、c1 を c2 コンストラクターに渡したいとします。
私が次のことをするだけなら...
... c2 の初期化子が実行されるまでに c1 が構築されない可能性があるため、これは良いことではないでしょうか? それとも、クラス宣言で c1 が c2 の前に来るだけで十分ですか?
または、明示的に c1 コンストラクターを参照する必要があります (それが必要でない場合は、明示的にするためにそうすることをお勧めしますか?)。例えば