首頁 > 後端開發 > C++ > 在最令人煩惱的解析中將參數名稱括起來是怎麼回事?

在最令人煩惱的解析中將參數名稱括起來是怎麼回事?

DDD
發布: 2024-12-14 19:10:12
原創
844 人瀏覽過

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

理解最令人煩惱的解析中的歧義:將參數名稱括起來

最令人煩惱的解析是指C 中的語法歧義,在聲明函數時可能會導致意外結果。出現的一個令人困惑的細節是能夠將某些行解析為函數聲明,即使它們看起來不符合預期的語法。

考慮以下行:

vector<int> v(istream_iterator<int>(cin), istream_iterator<int>());
登入後複製

這一行由於最令人煩惱的解析,可以被解釋為函數宣告。第一個臨時迭代器 istream_iterator(cin) 被解析為類型,而第二個臨時迭代器 istream_iterator() 被解釋為傳回不帶參數的迭代器的函數。

然而,目前還不清楚第一個臨時迭代器代表什麼類型。理解這一點的關鍵是認識到 istream_iterator(cin) 等價於 istream_iterator;辛。括號是多餘的,不會影響表達式的意思。這意味著第一個臨時迭代器是一個名為 cin 的 int 類型的 istream_iterator。

這就提出了是否可以在函數呼叫中任意括號參數名稱的問題。答案是肯定的,如果您想突出顯示參數名稱或闡明其目的,可以將參數名稱括起來。但是,通常不鼓勵這樣做,因為它可能會導致混亂或意外的程式碼。此語法的主要目的是支援從 C 繼承的遺留語法,並且不被認為是現代 C 程式碼中的最佳實踐。

以上是在最令人煩惱的解析中將參數名稱括起來是怎麼回事?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板