「Accelerated C++」本の第 8 章を読んでいます。セクション 8.3 は、入力イテレータと出力イテレータに関するものです。
vector<int> v; // read ints from the standard input and append them to v copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v));
[...]
copy の 2 番目の引数は、どのファイルにもバインドされていないデフォルト (空の) istream_iterator を作成します。istream_iterator 型にはデフォルト値があり、ファイルの終わりに達したか、エラー状態にある istream_iterator はデフォルト値と同じに見えるというプロパティがあります。したがって、デフォルト値を使用して、コピーの「1 つ後」の規則を示すことができます。
これは私が理解していることです: istream_iterator はテンプレート クラスであり、 istream_iterator< int> はテンプレートのインスタンスです。istream_iterator< int>() を記述すると、istream_iterator< int> オブジェクトの値の初期化がトリガーされます。これは、ゼロ初期化 + 暗黙的なデフォルト コンストラクター ( http://en.cppreference.com/w/cpp/language/value_initialization ) の呼び出しを意味します。istream_iterator< int> オブジェクトのデフォルトの初期化も同様に機能すると考えたので (トリガーはデフォルトのコンストラクターを呼び出します)、これを試しました。
vector<int> v; // read ints from the standard input and append them to v copy(istream_iterator<int>(cin), istream_iterator<int>, back_inserter(v));
しかし、これはコンパイルされません:
エラー: ',' トークンの前にプライマリ式が必要です
何が起こっているのかわかりません。どんな説明でも大歓迎です。