首頁 >後端開發 >C++ >為什麼局部類別不能用作 STL 演算法中的謂詞 (C 98/03)?

為什麼局部類別不能用作 STL 演算法中的謂詞 (C 98/03)?

DDD
DDD原創
2024-11-22 10:16:10725瀏覽

Why Can't Local Classes Be Used as Predicates in STL Algorithms (C  98/03)?

STL 演算法中局部類別的謎團

儘管lambda 表達式在STL 演算法中被廣泛用作謂詞,但局部類別似乎很神秘排除在該實用程式之外。在這個問題中,我們試圖解開標準規定的限制,即禁止本地類型作為謂詞參與 STL 演算法。

標準的禁止

本地類型的缺失類作為 STL 演算法中的謂詞類型源自於 C 98/03 標準所施加的明確禁止,如 C 03文章中所述14.3.1:

“本地類型、沒有連結的類型、未命名類型或由任何這些類型複合的類型不得用作模板類型參數的模板參數。”

此限制體現在編譯器標記程式碼(如提供的範例)中,其中本地結構甚至不能用作謂詞std::remove_if.

限制的理由

這種排除的理由籠罩在猜測之中。有些人推測這是一個疏忽,而另一些人則認為這是為了防止演算法中臨時的和可能令人困惑的類型定義。

C 11 中的演變

幸運的是, C 11 標準修正了這個問題,取消了對本地類型作為模板參數的限制。因此,當代編譯器通常允許在 STL 演算法中使用本地類別作為謂詞。

結論

雖然最初禁止本地類令人沮喪,但它C 11 中的刪除為在 STL 演算法中利用本地類型開闢了新途徑。如今,lambda 表達式和本機類別作為有效的謂詞選項共存,為開發人員提供了用於演算法操作的多功能工具。

以上是為什麼局部類別不能用作 STL 演算法中的謂詞 (C 98/03)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn