問題タブ [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.
c++ - 初期化リストに必要な効果を持つ初期化関数呼び出し?
const フィールドメンバーを持つ基本 Image クラスがあります。
これは、コンストラクターで、次のように初期化リストで幅と高さを初期化する必要があることを意味します。
ここで、サブクラスにファイルパスを提供することで画像をロードできるように、これをサブクラス化するつもりです (したがって、呼び出しコードは画像のロードについて心配する必要はありません)。このクラスは次のようになります。
ただし、ここでは、幅/高さを取得する前に画像をロードする必要があることがわかります。サブクラスには、初期化リストでも初期化する必要があるフィールドがあります。
これらすべてのフィールドを初期化できるように、サブクラスのコンストラクターをどのように設定できますか?
すべてのフィールドデータをキャプチャするサブクラスに別のオブジェクトを導入し、これを初期化リストの最初のオブジェクトとしてロードし、基本クラスが幅/高さを必要とするため、他のすべてのフィールドの値を再抽出することはできません。 (画像読み込みロジックが派生クラスにある場合は使用できません)。
const 修飾子を削除し、コンストラクターでフィールドを初期化する唯一の方法はありますか?
c++ - デフォルトのコンストラクターで初期化リストを明示的に設定することには、長所または短所がありますか?
C ++オブジェクトコンストラクターの完全な初期化リストを明示的に持つことの長所または短所はありますか?(デフォルトのコンストラクターを使用している場合でも、すべてのメンバーがリストされているように完全ですか?)
たとえば、オブジェクトがある場合:
コンストラクターを次のようにすることとの違いはありますか?
特にデータを設定する必要がある(またはデフォルト以外のコンストラクターを呼び出す)必要があるオブジェクトのみをリストするのではなく、次のようになります。
クラスにデフォルトのコンストラクターを使用するオブジェクトしかない場合、初期化リストを設定する必要がありますか?
例えば:
このようにコンストラクターを持つ意味はありますか?
ありがとう。
arrays - 連続していない番号を使用した F# 配列の初期化
F# 配列を N の倍数 (N > 1) で初期化する短い表記法はありますか? たとえば、N = 2:
おそらく、デフォルトの N = 1 のケースに似たもの:
c++ - ヘッダーファイルで初期化リストを定義する必要がありますか?
最近私はクラスを作成しましたSquare
:
=========ヘッダーファイル======
==========cppファイル======
しかし、それから私はたくさんのエラーを受け取ります。cppファイルを削除し、ヘッダーファイルを次のように変更した場合:
=========ヘッダーファイル======
エラーなしで準拠します。初期化リストをヘッダーファイルに含める必要があるということですか?
c++ - クラスでasio::socketを再初期化します
boost::socket
クラスメンバーとして使用する場合は、初期化リストを使用して定義する必要があり、コンストラクターがディスパッチする前でも定義する必要があることがわかりました。
つまり、ダミーパラメーターを使用してコンストラクターを証明する必要があり、必要なデータがある場合は、コンストラクターを再初期化する必要があります。
client.hpp
後でinit()
メソッドが呼び出されたときにsock
、初期化されたを指定する必要がありますio_service
。私はこれを行う方法がわかりません:
client.h
ここでは、何も削除されていないプロジェクト全体を見ることができます。
c++ - c++ の基本メンバー初期化セクションで std::map を初期化するにはどうすればよいですか?
基本的に、基本メンバーの初期化セクションでキーと値のペアで初期化したいクラスのメンバー変数としてマップがあります。
これを行うための構文が何であるかはよくわかりません。私は次のようなことを考えていました:
しかし、それは機能していません。
何か案は?
c++ - 不明なタイプの属性を持つテンプレートクラスのデフォルトコンストラクタ
引数のないデフォルトのコンストラクターが必要です。a
タイプが不明な属性を初期化するにはどうすればよいですか。
編集:以下のコメントで回答がありますが、まだわからないことがあります。私が持っている場合:
私のコンパイラは私にこの警告を出します:Member 'b' was no initialized in this constructor
。b
列挙型であり、列挙型ではないこの警告が表示されるのはなぜa
ですか?
c++ - 2 番目の派生クラスの C++ 初期化リスト
比較的深いクラス階層構造を記述しようとしているのですが、コンパイラが「[ベース クラスのデフォルト コンストラクタ] の呼び出しに一致する関数がありません」とスローし続けます。シナリオは次のとおりです。
コンパイラは、クラス C のコンストラクターの行に「A::A() の呼び出しに一致する関数がありません」というエラーをスローし、A::A(int) を使用するように指示します。
クラス A のデフォルトのコンストラクターがなく、サブクラスをサブクラス化しようとするとコンパイラーが混乱することを理解しています。しかし、私が理解していないのはその理由です。まさにそれを避けるために、初期化リストを使用しました。2 レベルの深さのクラスのみを使用すると問題なく動作しますが、3 番目のクラスでエラーが発生します。ここで何が間違っていますか?
c++ - 初期化リストに BOOST_THROW_EXCEPTION の三項演算子がない場合の回避策
少し奇妙に思えるかもしれませんが、初期化リストでその日を節約する例外をスローする三項を使用することがよくあります(したがって、サウンドコンストラクターの作成に役立ち、RAIIに役立ちます...)。たとえば、引数a
がsmart_ptr<>
非必要な場合nullptr
、次のようなメンバーを開始できます
これは有効で、合法で安全な使用法だと思います (そうでない場合は教えてください)。
最近、boost::exception に切り替えましたが、残念ながらcondition ? ret_value : BOOST_THROW_EXCEPTION(exception())
コンパイルされません (コンパイラは and を具体化できないためtypeof(ret_value)
) void
。
まったく新しいプライベート静的メソッドを作成してif
内部に配置するよりも優れた回避策はありますか?
c++ - 基本クラスで初期化リストを使用するにはどうすればよいですか?
以下を考えると:
B
の要素も構築する初期化リストを使用してを構築するにはどうすればよいA
ですか? 以下はうまくいかないようですが、次のようなものを探しています: