最も厄介な解析における一時イテレータの複雑なケース
最も厄介な解析、C の悪名高い解析の曖昧さは、困惑を引き起こす質問: 次の行は関数としてどのように解釈できますか?宣言?
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
この奇妙な動作を理解するには、最も厄介な解析の詳細を掘り下げる必要があります。 2 番目の一時反復子は、実際には型、つまりパラメーターのない反復子を生成する関数として解釈できます。ただし、重要なのは、最初の一時イテレータの解釈を理解することにあります。
2 番目のイテレータとは異なり、最初の一時イテレータはかっこで囲まれていてわかりにくく、明示的なパラメータ名がありません。 C の伝統であるこの型破りな構文は、「この反復子はどのような型を表しているのですか?
」という質問を引き起こします。その答えは、istream_iterator
結局のところ、このコードの複雑な性質は、この古い構文への依存から生じています。最初のパラメータが istream_iterator
以上がC で `vector v(istream_iterator(cin), istream_iterator());` が関数を宣言するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。