在STL 演算法中使用本地類:解開本地類型限制
在C 程式設計領域,本地類長期以來一直被禁止作為STL 演算法的謂詞,提出了有關潛在限制及其的問題
C 98/03 標準明確禁止本地類型作為模板參數,包括本地類別。標準第 14.3.1 條明確規定「本地類型 [...] 不得用作模板類型參數的模板參數。」
此限制背後的基本原理源於短暫的當地類型的性質。由於它們存在於有限的範圍內,因此它們的破壞可能會意外發生,當用作 STL 演算法的謂詞時,可能會導致未定義的行為。
但是,隨著 C 11 的出現,這項限制被取消。修訂後的標準允許將本機類型用作模板參數,從而使本地類別能夠充當 STL 演算法的謂詞。
例如,考慮以下程式碼片段:
#include <algorithm> #include <vector> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v(array, array + 10); struct even { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); }
中在此程式碼中,本地類別甚至定義了一個檢查偶數的謂詞。此類別現在可以直接用作 std::remove_if 演算法的參數,該演算法從向量 v 中刪除所有偶數。
雖然對本地類型的限制最初是為了防止潛在的未定義行為,它在 C 11 中的刪除為在函數式程式設計場景中使用本地類別開闢了新的可能性。
以上是本地類別最終可以用作 C 11 中 STL 演算法的謂詞嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!