最も厄介な解析: 混乱を招く詳細の明確化
プログラミングにおける「最も厄介な解析」とは、C 構文の悪名高いあいまいさを指します。これにより、予期しない関数宣言が発生する可能性があります。この記事は、最も厄介な解析のこのような混乱を招く側面の 1 つを解明することを目的としています。
次のコード行を考えてみましょう:
vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
この行は関数宣言としてどのように解析できますか?
>構文を理解する
通常、最も厄介な解析問題は、2 番目の一時オブジェクトがイテレータを返し、引数を取らない関数として解釈されるときに発生します。ただし、この場合、ジレンマを引き起こすのは最初の一時オブジェクト istream_iterator
最初の一時オブジェクト istream_iterator
解釈
コンパイラは istream_iterator
したがって、コード行は、istream_iterator
引数リスト内の任意の括弧
istream_iterator
(cin) の cin を囲む括弧は、それが整数であることを示しません。括弧内の関数の引数。代わりに、istream_iterator結論
このケースを理解するための鍵は、余分な括弧はステートメントの意味を変更しません。 istream_iterator以上が`vector v(istream_iterator(cin), istream_iterator());` は C の関数宣言としてどのように解釈できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。