ホームページ > バックエンド開発 > C++ > `vector v(istream_iterator(cin), istream_iterator()());` が関数宣言として解析されるのはなぜですか?

`vector v(istream_iterator(cin), istream_iterator()());` が関数宣言として解析されるのはなぜですか?

Barbara Streisand
リリース: 2024-12-21 02:49:08
オリジナル
768 人が閲覧しました

Why Does `vector v(istream_iterator(cin), istream_iterator()());` Parse as a Function Declaration?

最も厄介な解析の不可解な側面を解明する

最も厄介な解析は、コードの予期しない解釈につながる可能性がある悪名高いコンパイラの癖です。関数宣言に似た行が実際には異なる構造を表している場合に、複雑なケースが発生します。

次の行を考えてみましょう:

複雑なことに、この行は関数宣言として解析される可能性があります。 2 番目の一時イテレータは論理的に型として解釈できますが、最初の一時イテレータの役割はそれほど明確ではありません。

最初の一時イテレータの性質を明確にする

最初の仮定に反して、istream_iterator

int>(cin) は関数型ではありません。むしろ、これは代替構文 istream_iterator と同じです。 cin.

C には、引数の名前を任意に括弧で囲むことができる同様の宣言子の構文が存在します。この方法は一般に「間違い」として推奨されませんが、そのレガシーにより C では依然としてサポートされています。

したがって、 istream_iterator(cin) は istream_iterator 型のパラメータを宣言します。シンという名前。引数名を括弧で囲むことにより、構文はパラメータ名と型の指定を効果的に分離します。

以上が`vector v(istream_iterator(cin), istream_iterator()());` が関数宣言として解析されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート