問題タブ [delegating-constructor]
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.
visual-c++ - オーバーロードされたコンストラクター呼び出しをC++/CLIの別のコンストラクターに転送する方法
純粋なC++でこれを行う方法がないことは知っていますが、C#で行うのと同じ方法で、C ++/CLIで別のコンストラクターの初期化リストからコンストラクターを呼び出すことができるかどうか疑問に思いました。
例:
c++ - テンプレート クラス - いくつかの質問
2 つの整数を引数として取るコンストラクターを作成する必要があります。
そこから、参照によってこれらの整数を取得するメソッドを呼び出す必要があります。このメソッド内で、整数をchar*
型 (数字の配列) に動的に変換する必要があります。
コンストラクターの最後には、char*
初期整数の代わりに 2 つの配列が必要です。
他のクラスが同じことを構造上で行うため、私はこのようにする必要があります。それらをテンプレート属性に保存します。
私は c++ 言語は初めてですが、最初に推測したのはテンプレートを使用することでした。このトピックについて少し調査したところ、うまくいくはずであることがわかりました。
自分ですべてをコンパイルしたいのですが、頭の中で C++ クラスを実装するのが面倒で、かなり長いコンパイル エラーのリストが生成されます。
最初の質問 - これはテンプレートを使用して実行できますか? 2 番目の質問です。私はすでに自分で何かを書いているためです。
これは大丈夫ですか、それとも何か間違ったことをしましたか?
C++ でクラスを実装する方法について何か提案はありますか?
次のような値で属性を初期化できないのはなぜですか。
また、C++ でこのキーワードを使用する必要がない場合、次のようにするにはどうすればよいですか?:
c++ - 他に基づく引数のデフォルト値
私はこのようなクラスを達成したい:
ic のデフォルト値を ia と ib に基づいて計算したいのですが、ここのコードはコンパイル時にエラーになります。
このようなものを取得する方法があるのだろうか。
ありがとう。
c++ - 初期化リストを持つ C++ 委譲コンストラクター。どの初期化が発生しますか?
非常によく似た質問を見てきましたが、答えを理解しているかどうかはよくわかりません。コンストラクターをデリゲートすると、初期化リストからどの初期化が発生しますか?
例:
ここでは、コンパイラの設定により、両方のクラスの完全な初期化子リストが必要です。しかし、私が望んでいないのは次のとおりです。
- 最初のコンストラクター ( ) が 2 番目のコンストラクター ( )
int, int
を呼び出すint, int, Other *
- 2 番目のコンストラクターは、デフォルトのアドレスを
pOtherClass
- 最初のコンストラクターの初期化リストが に割り当て
pOtherClass
られNULL
ます。
一番上にリンクした質問は、この動作が発生しないことを示しているようですint, int
が、( ) コンストラクターの初期化子リストのポイントは何ですか? コンパイラを満足させるためだけですか?
c++ - MSVC 直接コンストラクター呼び出し拡張
この応答で、tlovelessは、MSVCthis->foo::foo(42);
でコンストラクター委任を使用してコンストラクターを直接呼び出すことが可能であることを指摘しました。
これが MSVC でもコンパイルできることに驚きました。clang ++、g ++、および私は、それが違法であることに同意します。たとえば、[class.ctor]/2「コンストラクターには名前がないため、名前の検索中に見つかりません」
ただし、MSVC は、MSVC12 Update 1 (2013) および MSVC10 SP1 (2010) の/Wall
言語拡張機能の有無にかかわらず警告を発しません。/Za
出力は次のとおりです。
両方のバージョンで。したがって、一時的に作成されるものはありませんが、コンストラクターが呼び出されます。
質問:
- この拡張子の名前は何ですか?
- 延長とみなされませんか?(
/Za
そして拡張機能のリストはそうではないようです) - この機能の / 公式の説明に関するドキュメントはありますか?
(この機能を強く思い出させるので、この質問に [delegating-constructors] タグを付けました)
メタ情報: この機能はある程度知られているため、この質問は重複しているとほぼ確信しています。たとえば、「同様の質問」に対するこの回答を参照してください。この機能を説明する回答が見つかった場合は、これを dup として閉じることを躊躇しないでください。
c++ - 委譲コンストラクターを使用して再初期化する
私はこのクラスを持っています。委譲コンストラクターを使用して、値のみを0としてX
変更したいのですが、それは可能ですか?i
j
編集:私X(int new_int) : X{new_int, 0}
は動作することを知っていますが、リスト内のもう 1 つの変数を初期化した場合のエラーを知りたいと思いました。
私は別のものを持っている可能性があり、それをとz
とともに初期化したいと思います。i
j
すなわちX(int new_i) :z{ new_i }, X(new_i, 0) {}
c++ - C++ : 別のコンストラクターを呼び出す前に何らかの処理を行うことはできますか?
2 つのコンストラクターを持つクラスがあります。
最初のものはいくつかのオブジェクトを取り、最初に単純な型からオブジェクトを作成する 2 つ目のオブジェクトが必要です。これは可能ですか?
c++ - C++11 委任された ctor は、init 関数を呼び出す C++03 ctors よりもパフォーマンスが悪いですか?
[この質問は高度に編集されています。申し訳ありませんが、編集を以下の回答に移動しました]
C ++ 11のウィキペディア(サブ記事を含む)から:
この [新しい委譲コンストラクター機能] には注意点があります。C++03 では、コンストラクターの実行が終了するとオブジェクトが構築されると見なされますが、C++11 では、コンストラクターの実行が終了するとオブジェクトが構築されると見なされます。複数のコンストラクターの実行が許可されるため、これは、各委任コンストラクターが独自の型の完全に構築されたオブジェクトで実行されることを意味します。派生クラス コンストラクターは、基本クラスの委任がすべて完了した後に実行されます。」
これは、委任チェーンが ctor 委任チェーン内のすべてのリンクに対して一意の一時オブジェクトを構築することを意味しますか? 単純な init 関数の定義を避けるためだけにかかるオーバーヘッドは、追加のオーバーヘッドに値しません。
免責事項: 私は学生なので、この質問をしましたが、これまでの回答はすべて正しくなく、研究不足および/または参照されている研究の理解が不足していることを示しています. 私はこれにいくらかイライラしており、その結果、私の編集やコメントは、ほとんどがスマートフォンを介して、急いで構成されていませんでした. 失礼します。以下の回答でそれを最小限に抑えたことを願っています。また、コメントでは注意し、完全で、明確にする必要があることを学びました。