首頁 > 後端開發 > C++ > 為什麼 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中宣告一個函數?

為什麼 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中宣告一個函數?

Susan Sarandon
發布: 2024-12-23 14:54:24
原創
378 人瀏覽過

Why Does `vector v(istream_iterator(cin), istream_iterator());` Declare a Function in C  ?

最令人煩惱的解析中臨時迭代器的令人困惑的情況

最令人煩惱的解析,C 中臭名昭著的解析歧義,帶來了令人困惑的問題問題:如何將以下行解釋為函數宣告?

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

要理解這種奇怪的行為,我們必須深入研究最令人煩惱的解析的細節。第二個臨時迭代器確實可以被解釋為一種類型,即產生不帶參數的迭代器的函數。然而,關鍵在於理解第一個臨時迭代器的解釋。

與第二個迭代器不同,第一個臨時迭代器出現在括號內,並且缺乏明確的參數名稱,令人困惑。這種非常規語法是 C 語言的遺留物,引發了這樣的疑問:這個迭代器代表什麼類型?

答案是 istream_iterator(cin) 本質上等同於 istream_iterator;辛。括號沒有任何意義,只是多餘的。這種奇怪的語法允許您在函數聲明中任意將參數名稱括在括號內。

最終,這段程式碼的令人困惑的本質源自於它對這種過時語法的依賴。它聲明第一個參數是 istream_iterator 。名為 cin.這種意外的行為凸顯了此類語法遺留問題的缺點,可能導致程式碼中的混亂和歧義。

以上是為什麼 `vector v(istream_iterator(cin), istream_iterator());` 在 C 中宣告一個函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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