次のように、イテレータ範囲を使用してベクトルを構築することができます。
std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{});
しかし、次のように、C++11 の統一された初期化構文 (ブレーサーに注意してください) を使用してコードをコンパイルして実行することもできます。
std::vector<std::string> vec{std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{}};
ここで実際に何が起こっているのですか?
初期化子リストを受け取るコンストラクターは、他の形式の構築よりも優先されることを知っています。コンパイラは、の 2 つの要素を含む初期化子リストを取得するコンストラクタに解決すべきではありませんstd::istream_iterator
か? std::istream_iterator
ベクトル値の型に変換できないため、これはエラーになるはずstd::string
ですよね?