問題タブ [list-initialization]

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 に答える
398 参照

c++ - 中括弧で囲まれた初期化子と完全転送を組み合わせる方法

このコードは次のようにコンパイルされます。

同様にそのように:

しかし、これはしません:

その理由は、3 つ目が を呼び出すためですがtuple(const Types&...)、恣意的な制限のようです。

C++ 11 は可変個引数テンプレートでこれを表現できませんか、それとも可能ですか?

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

c++ - ブレース付きイニシャライザで auto とテンプレートの型推定が異なるのはなぜですか?

ブレース付きイニシャライザを指定するautoと、 の型が推定されますがstd::initializer_list、テンプレート型の推定は失敗することを理解しています。

これが C++11 標準のどこで指定されているかさえ知っています: 14.8.2.5/5 箇条書き 5:

[プログラムにある場合、推定されないコンテキストです] 関連する引数がイニシャライザ リスト (8.5.4) であるが、パラメータに std::initializer_list またはおそらく cv 修飾された std::initializer_list への参照がない関数パラメータタイプ。【例:

テンプレート void g(T);

g({1,2,3}); // エラー: T の引数が推定されません

—<em>例の終了]

私が知らない、または理解していないのは、型推論の動作にこの違いが存在する理由です。C++14 CD の仕様は C++11 と同じであるため、おそらく標準化委員会は C++11 の動作を欠陥とは見なしていません。

autoブレース付きイニシャライザの型を推測する理由を知っている人はいますが、テンプレートは許可されていませんか? 「これが理由かもしれない」という形式の憶測的な説明は興味深いものですが、私は、標準がそのように書かれた理由を知っている人々からの説明に特に興味があります。

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

expression - ブレース初期化リストが式ではないのはなぜですか?

C++11 標準の 93 ページ $5.1.2 を読んでいるときに、この場合に波括弧初期化リストを使用することは違法であると書かれていました: auto x=[]{return {1,2}} ; //エラー: ブレース初期化リストは式ではありません

そして、これら 2 つのトピックを見つけました。1 つは標準から、もう 1 つは N3681 提案からです。

Page397 $14.8.2.5: イニシャライザ リストの引数により、パラメータが非推定コンテキストと見なされます。$7.6.1.4: auto の出現箇所を新しく発明された型テンプレート パラメーター U に置き換えるか、初期化子が波括弧初期化リスト (8.5.4) の場合は std::initializer_list に置き換えます。

N3691 の提案では、「ブレースで初期化された auto をイニシャライザ リストに推論しないように変更し、ブレースで初期化された auto が複数の要素を持つ場合にブレースで初期化された auto を禁止する」ことを提案し、「ブレースを返すと、 list は式ではないため機能しません" http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3681.html

しかし、「ブレース初期化リストが式ではないのはなぜですか?」というトピックを見つけることができませんでした。これは、このトピックと同じ意味を持っている可能性があり ます。 しかし、C++ 委員会がこの種の文法は無価値であると結論付けた理由を彼が理解しようとしている間に、少し違いがありました。では、これには何か特別な理由があるのでしょうか。どうもありがとうございました。

0 投票する
5 に答える
224356 参照

c++ - リストの初期化 (中括弧を使用) が他の方法より優れているのはなぜですか?

なんで?