ホームページ > バックエンド開発 > C++ > 最も厄介な解析で引数名を括弧で囲むのはどうなるのでしょうか?

最も厄介な解析で引数名を括弧で囲むのはどうなるのでしょうか?

DDD
リリース: 2024-12-14 19:10:12
オリジナル
844 人が閲覧しました

What's the Deal with Parenthesizing Argument Names in the Most Vexing Parse?

最も厄介な解析のあいまいさを理解する: 引数名の括弧付き

最も厄介な解析とは、関数を宣言するときに予期しない結果を引き起こす可能性がある C の文法的な曖昧さを指します。 。混乱を招く詳細の 1 つは、特定の行が、予期された構文に準拠していないように見える場合でも、関数宣言として解析できることです。

次の行について考えてみましょう。

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
ログイン後にコピー

この行Most Verxing Parse により、関数宣言として解釈される可能性があります。最初の一時反復子 istream_iterator(cin) は型として解析され、2 番目の一時反復子 istream_iterator() は引数なしの反復子を返す関数として解釈されます。

ただし、最初の一時反復子がどの型を表すかはすぐにはわかりません。これを理解する鍵は、istream_iterator(cin) が istream_iterator(cin) と同等であることを理解することです。シン。括弧は不要であり、式の意味には影響しません。これは、最初の一時反復子が cin という名前の int 型の istream_iterator であることを意味します。

これにより、関数呼び出しで引数名を任意に括弧で囲むことができるかどうかという疑問が生じます。答えは「はい」です。引数を強調したり、その目的を明確にしたりしたい場合は、引数名を括弧で囲むことができます。ただし、混乱を招くコードや予期しないコードが発生する可能性があるため、一般的には推奨されません。この構文の主な目的は、C から継承された従来の構文をサポートすることであり、最新の C コードではベスト プラクティスとみなされません。

以上が最も厄介な解析で引数名を括弧で囲むのはどうなるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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