首頁 > 後端開發 > 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?

解開最令人煩惱的解析的一個令人困惑的方面

最令人煩惱的解析是一個臭名昭著的編譯器怪癖,可能會導致代碼的意外解釋。當類似於函數宣告的行實際上代表不同的構造時,就會出現一種令人困惑的情況。

考慮以下行:

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

令人困惑的是,這一行可能會被解析為函數宣告。雖然第二個臨時迭代器可以在邏輯上解釋為類型,但第一個臨時迭代器的作用不太清楚。

澄清第一個臨時迭代器的性質

與最初的假設相反,istream_iterator

int>(cin) 不是函數類型。相反,它與替代語法 istream_iterator 相同。 cin.

在 C 中,存在類似的聲明符語法,其中參數的名稱可以任意加括號。儘管這種做法通常被認為是“錯誤”,但由於其遺留問題,它在 C 中仍然受支援。

因此, istream_iterator(cin) 聲明了一個 istream_iterator 類型的參數;名為 cin.透過在參數名稱周圍提供括號,語法有效地將參數名稱與類型規範分開。

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

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