問題タブ [initializer-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 投票する
1 に答える
2351 参照

c++ - 多次元std::initializer_listの使用

C++での多次元std::intializer_listの使用について質問があります。Matrixクラスがあり、次のように初期化できるようにしたいと思います。

私が今持っているコンストラクターは2次元初期化子リストの引数を取りますが、コンパイラーは私がそれをどのように使用しているかを気に入らない。コードは次のとおりです。

そして、ここにエラーがあります:

そのエラーを取り除くにはどうすればよいですか?初期化リストなどの醜いベクトルを作成する必要がないように再構築する方法はありますか?

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

c++ - さらに別の C++ オブジェクトの初期化の問い合わせ

多くのクラス メンバーとさまざまなコンストラクターを持つこのクラスがあります。

これまでは、所有している各コンストラクターでコンストラクター初期化リストを使用し、各メンバーを希望どおりに調整していました。

クラスに新しいメンバーを追加するたびに、各コンストラクターにアクセスし、初期化リストを更新してこのメ​​ンバーにデフォルト値を追加する必要があるため、これは非常に面倒です。

そこで、必要な値を初期化するメソッドを追加しようと考えました。問題!メソッドは初期化リストの後に実行されるため、この初期化リストに入力した特定の値はメソッドによってオーバーライドされます。

簡単な例:

それで、私の質問:リスト初期化子とメソッド初期化子を混在させて、リスト初期化子がメソッド初期化子よりも優先されるようにすることはできますか? 上記の例では、m1 を最後のコンストラクター
にとどめたいと考えています。true

注:メソッド呼び出しのに初期化リストを移動できることはわかっていますが、これは値を members に 2 回割り当てることを意味しinit_members()ます。最適ではありません:-)

在庫があれば、ちょっとしたトリックを期待していました。

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

c++ - 中括弧で囲まれた初期化子はいつ使用しますか?

C++11 では、クラスを初期化するための新しい構文があり、変数を初期化する方法が多数あります。

宣言する変数ごとに、どの初期化構文を使用するかを考える必要があり、これによりコーディング速度が低下します。中括弧を導入する意図がなかったことは確かです。

テンプレート コードに関しては、構文を変更すると異なる意味になる可能性があるため、正しい方法を使用することが不可欠です。

どの構文を選択すべきかという普遍的なガイドラインがあるのだろうか。

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

c++ - 三項演算子 + initializer_list からの C++11 コンストラクター

アプリケーションの開発中に、次の問題が発生しました。std::list<string>特定の関数ポインタが null の場合は空を返し、それ以外の場合はその関数の結果を返したいと考えていました。これは私のコードの簡略版です:

ただし、?:これらの場合は通常、三項 ( ) 演算子を使用するのが好きなので、このように使用してみました (いつものように):

しかし、このエラーが発生しました:

これは、三項演算子を使用して、コンストラクターを使用して作成されたオブジェクトを返すことができないということinitializer_listですか? それには何か特別な理由がありますか?

0 投票する
6 に答える
75961 参照

c++ - 初期化子リストで同じ整数を 10 個使用して STL ベクトルを初期化できますか?

初期化子リストで同じ整数を 10 個使用して STL ベクトルを初期化できますか? これまでの私の試みは失敗しました。

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

c++ - イニシャライザ リストのシーケンス ポイントの警告

実際には同じものへの参照である場合とそうでない場合がある2つの参照を取る親クラスがあります。この場合、それらが同じ場合、Child クラスの初期化子リストでシーケンス ポイントの警告が表示されます。

メモリが割り当てられた後にその行の逆参照が発生することが保証されていないためだと思います。いずれにせよ、私の質問は、親または A のいずれかに変更を加えずに、とにかくこれに関連するものはありますか?

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

c++ - これは部分関数テンプレートの特殊化ですか?

この質問に答えた後、私はこれを思いついた

シンプルな関数テンプレート (C++11) がありました。

しかし、GCC はテンプレート パラメーターを std::initializer_list として推測することを好まないように見えるため、警告を発しました。だから、何も考えずに、私は専門化しました:

これはうまくいきました。もう警告はありません。しかし、改めて考えてみると、C++ は関数テンプレートの部分的なテンプレート特殊化をサポートしていないことを思い出しました。しかし、それはこれがそうであるように見えるものです。私の唯一の推測は、std::initializer_list がまだテンプレート パラメータに依存しているため、これが許可されているということです。したがって、本質的には別のテンプレートです。しかし、これが本来あるべき姿かどうかはわかりません (テンプレートが過負荷にならないという問題はありませんか?)。

これを受け入れるのは標準的な行動ですか?なぜ?

おまけの質問として、GCC がテンプレート パラメーターを std::initializer_list として推測するのを好まないのはなぜですか? コードをコピーして貼り付けて、パラメーターを std::initializer_list に置き換えるだけだと期待するのは、かなりばかげているようです。

警告メッセージ:

から呼び出されたときin_list(3, {1, 2, 3, 4, 5});

編集: どうやらテンプレート パラメーターを initializer_list として推測することは、私のバージョンの GCC ( cite ) のワーキング ドラフトによる拡張です。新しい質問:これは最終的な c++11 標準の時点でまだ拡張機能ですか? もしそうなら、これは、標準に準拠したコードの 2 番目の関数を追加する必要があることを意味します。ご助力いただきありがとうございます!

EDIT2: GCC 4.7 ではコンパイラの方言フラグが削除されているように見えるため、問題は解決されたようですが、どのように解決されたかはわかりません。

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

c++ - gcc: コンストラクターでの初期化の順序に関する警告の欠如

gcc はメンバー変数の初期化の順序abクラス C について警告する必要がありますか? 基本的に、オブジェクト b は初期化され、そのコンストラクターはオブジェクト A の前に呼び出されます。これは、初期化されていない をb使用することを意味しますa

gcc からの出力:

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

c++ - 一様な初期化で初期化子リストの参照を初期化できないのはなぜですか?

つまり、なぜこれを行うのですか:

GCC 4.7 でコンパイラ エラーが発生する場合:

?

エラーを修正するには、 を に変更する必要がありs{s}ますs(s)。これは、均一な初期化の均一性を壊しませんか?

編集:clangで試してみたところ、clangはそれを受け入れたので、おそらくGCCのバグですか?