問題タブ [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.
c++ - ブレース初期化リストと関数テンプレート型の推定順序
関数テンプレートのパラメータの型推定手順について質問があります。
次の例を見てください。
私が物事を正しく理解していれば、2 番目のパラメーターはstd::istream_iterator
、デフォルトのコンストラクターが呼び出される型であると推定されます。
適切なstd::vector
コンストラクターは次のように宣言されます。
std::istream_iterator<int>
2 番目のパラメータも同様に推定されるので、最初のパラメータの型が推定されるstd::istream_iterator<int>
ため、統一された初期化セマンティクスを適用できます。私が知らないのは、型推論がどの順序で行われるかです。これに関する情報をいただければ幸いです。
前もって感謝します!
c++ - C++ 11で可変引数関数がリスト初期化引数を「食べる」ことができないのはなぜですか?
サンプルコードは次のとおりです。
emplace()
次のような署名がある場所:
はgcc
、関数が 0 個の引数を期待していることを示しています - 2 個が提供されています。はclang
、関数が1つの引数を期待していることを示しています-2が提供されています。
私も理解していません - このコードの問題は何ですか?
c++ - これがペアの initializer_list であることを C++11 が推測できるようにする言語規則は何ですか?
C++11 では、std::map<std::string, int>
次のように a を初期化することは合法のようです。
直感的に、これは理にかなっています - 中括弧で囲まれたイニシャライザは、文字列のペアのリストであり、std::map<std::string, int>::value_type
(std::pair<std::string, int>
おそらくいくつかのconst
修飾付き.
ただし、ここでタイピングがどのように機能するかを理解しているかどうかはわかりません。ここで変数宣言を削除し、中括弧で囲まれた初期化子だけを使用すると、コンパイラは、中括弧で囲まれたstd::initializer_list<std::pair<std::string, int>>
ペアがstd::pair
s を表していることを認識できないため、a を見ていることを認識できません。したがって、コンパイラはstd::map
、ネストされた中括弧がペア用であることを認識するのに十分な型情報がコンストラクターから得られるまで、中括弧で囲まれた初期化子に型を割り当てる行為を何らかの形で延期しているように見えます。C++03 でこのようなことが起こったことを覚えていません。私の知る限り、式の型は文脈に依存することはありませんでした。
このコードが正しくコンパイルされ、コンパイラが初期化子リストに使用する型を決定できるようにする言語規則は何ですか? これが機能するのは本当に興味深いので、C++11仕様への特定の参照を含む回答を期待しています!
ありがとう!
c++ - C++11 均一な初期化 (つまり、リストの初期化) が継承でコンパイルされない
上記のコードはコンパイルされず、次のようになります。
「コンストラクタ」行を削除しても同じです。=
記号を削除すると、つまりD obj {1};
以下のようになります。
このような問題を修正する正しい構文は何ですか?
c++ - イニシャライザ リストからのオブジェクトの初期化に関する問題
次のコードがあります。
この例では、 res 変数リストに渡すとコンパイルされますが、それ以外の場合は初期化子リストを直接使用する場合と同様に失敗しますhttp://ideone.com/8jYsDY
これは、initializer_list が関係している場合の型推論の仕組みに関係していると思います。これが標準に準拠している場合は、いくつかの参照が適切です。