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

c++ - 配列のC++ベクトル

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

c++ - C ++ 11の最小および最大可変個引数テンプレートバリアント?

私は、新しいinitializer_listバリアントがあり、 Variadic Templateバリアントがないという標準を読んminでいますか?maxminmax

したがって、これは問題ありません。

しかし、これはそうではありません:

多くの人は、可変個引数テンプレートがこれを簡単に実装できると期待しているので、がっかりするかもしれません。

VTを使用するのはやり過ぎだminと思いますmax

  • 可変個引数テンプレートは、複数のタイプを処理できます
  • 初期化リストは、すべてのタイプが設計上同じであることを確認します

したがって、ILはこのタスクにはるかに適しています。

私の解釈は正しいですか?

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

c++ - 継承された変数での初期化リストの使用

私は約20分間プログラムをいじっていましたが、何らかの理由で初期化リストで継承された変数を使用できないことがわかりました。このプログラムの例:

エラーが発生します

エラー:クラス「B」には「i」という名前のフィールドがありません</ p>

ただし、コンストラクターを次のように変更すると、次のようになります。

コンパイルします。

継承された変数を初期化できないことを私は知りませんでした。私の質問は、なぜですか?

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

c++11 - イニシャライザ リスト (C++0x) のクロージャ デリータとコンパイラの警告

warning C4355: 'this' : used in base member initializer listVisual C++ 2010 から取得します。

ハンドルを保持しているクラスがあり、クラスの ctor が失敗した場合でもハンドルを自動的に閉じたい(そのため、dtor は呼び出されません)。ただし、ハンドル ラッピング クラス全体をわざわざ作成したくはありません。むしろ、それをスマート ポインターに保持したいと考えています。そして、私はこれを書いた:

クロージャーの前に、 _handle を のようなもので初期化していまし_handle(nullptr, bind(PortDeleter, placeholders::_1, ref(_log)))たが、それには別の定義が必要です。

私の質問: 警告は、この特定のインスタンスに対する懸念事項ですか? いずれにせよ、詳細な理由は何ですか?それを回避する簡単な方法はありますか?

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

arrays - C++0x: "operator[]" で "braced-init-list" を禁止するのはなぜですか?

N3291 で変更がマークされていることに気付きました ( 5.2.1 添え字 [expr.sub] ):

以前はoperator[]、新しいbraced-init-listでオーバーロードしても問題ありませんでした:

これは削除され、次のものに置き換えられました。

ブレース初期化リストは、組み込み添え字演算子と一緒に使用してはなりません。

なにが問題だったの?

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

c++11 - C ++ 0x:過負荷の解決

標準テキストには、8.5.4(3)リスト初期化[dcl.init.list]の例があります。

(例はref-to-tempに関するものですが、ここでは過負荷の解決を参照します)。

スコット・マイヤーズが彼の講演/スライドで別の話をしているのに対し、

std :: initializer_listパラメーターは、他のタイプよりも常に優先されます。

例は少し異なりますが、同じものではありませんか?-コンストラクターによる過負荷の解決はinitializer_listいつどのように行われますか?または、ここに別の問題がありますか?

どちらの場合も、オーバーロードはどのように決定されますか?両方が正しければ、ここで何が恋しいですか?

ケリックのコメントの編集/明確化:私の気持ちは、2つの例が互いに矛盾しているということです:

  • Stdは、aがaconst char*に変換される例を示しています。これは、提供されたものとstring一致しないinitializer_list<int>ため、提供された「通常の」const string&-c'torが使用されます。
  • スコットの例は{double, double}、-c'torが利用可能であり、したがって選択されたときに初期化さintializer_list<int>れます。これは、リストが優先されるためです。したがって、(double, double)この方法で初期化されたときに、提供された-c'torが選択されることはありません。

もちろん、Stdは常に正しいですが、例を間違って適用している可能性があります。Stdの例には&、私の質問には関係ないと思うが、おそらく私は間違っているということが含まれています。

スコットのスライドはごく最近のものであり、Stdの関連するセクションがその点に変更されていることはわかりません(ただし、ある程度「広く普及している」ため、すべてを範囲に収めることは困難です:-)

編集-2 :スライドに組み込まれていなかった標準の変更が遅れたというスコット自身からのメールを受け取りました。

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

c++ - コピー不可のコンテナをイニシャライザリストで初期化するには?

重複の可能性:
移動専用型のベクトルをリスト初期化できますか?

このコードをコンパイルするには、gcc 4.6.1 を使用します。

g ++が不平を言うには、次のようなものがあります

この場合、g++ はまだコピー コンストラクターを試行しているようですが、イニシャライザー リストに入力したのは右辺値です。では、コピー不可のコンテナをイニシャライザ リストで初期化するにはどうすればよいでしょうか。

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

c++ - 初期化リストの変換

C++ 0x で記述されたクラスを、Visual Studio 2008 でコンパイルされるクラスに変換する必要があります。コードは std::initializer_list を使用します。

以下はコードです

VS 2008 が理解する古い標準に変換する必要があります。

100 行の新しい C++ コードを古い C++ に変更するのに本当に苦労しています。だから、私を助けてください。

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

c++ - 初期化リストを使用してstd::arrayオブジェクトを作成するにはどうすればよいですか?

重複の可能性:
initializer_listを使用してメンバー配列を初期化するにはどうすればよいですか?

初期化子リストを使用して、std::arrayを適切に作成できます。

ただし、クラスのデータメンバーまたはベースオブジェクトとしてから構築しようとするとstd::initializer_list、機能しません。

gcc 4.6のエラー:

ラッパークラスをinitializer-listで初期化できるようにするには、どうすればよいですか。

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

c++ - 構造体のマップへの代入の構文

G++ (4.6) は、C++03 で代入のこの構文を受け入れますが、「拡張初期化子構文は C++0x でのみ使用可能です」(言い換え) と不平を言います。値を順番に受け入れるコンストラクターを作成できることは知っていますが、この構文が受け入れられるかどうか (C++0x を使用しない場合)、または C+ がとても気になるので G++ が私をなだめているだけかどうかを知りたかったのです。 +0x。

clang++ でコンパイルしても (C++0x では、イニシャライザ リストが不足していると想定しています)、「期待される式」と言って、基本的に「それは一体何なの?」という意味です。コンストラクター (上記でコメントアウト) を使用すると、エラーがスローされます。

要約:基本的に、使用する正しい構文は何ですか? また、初期化リスト形式 (C++03 または C++0x) を使用できますか?