1

次のように標準入力を使用して、コンテナー両端キューを初期化できます。

deque<int> c((istream_iterator<int>(cin)),(istream_iterator<int>()));

《C++ 標準ライブラリ》で説明されているように、イニシャライザの引数を囲む余分な括弧が必要です.それらがなければ、c は戻り値の型が deque である関数を宣言します.その最初のパラメータは cin という名前の istream_iterator 型であり、2 番目の引数は無名です.パラメータのタイプは「istream_iterator を返す引数を取らない関数」です。次のコードを見てください。

deque<int> c(istream_iterator<int>(cin),istream_iterator<int>());

しかし、余分な括弧は、初期化子が宣言の構文と一致しないように強制します。余分な括弧がイニシャライザを宣言の構文と一致させない理由がわかりません。どうもありがとう。

4

1 に答える 1

3

C++ 標準で定義されている文法では、この形式を関数宣言として受け入れないためです。

T name((U), (V));
于 2012-04-08T12:35:12.653 に答える