C++ 中的 is_final 模板
在本文中,我們將討論 C++ STL 中 std::is_final 模板的工作原理、語法和示例。
is_final 是一個模板,它屬於 <type_traits> 標頭檔案。此模板用於檢查給定型別 T 是否為最終型別。
什麼是 C++ 中的最終型別?
當我們使用 final 識別符號宣告一個型別時,它被稱為最終型別。最終型別是一種特殊的型別,不能被擴充套件以建立其他型別。在 C++ 中,要使型別成為最終型別,我們將建立一個型別為友元型別,然後虛擬繼承該型別,以使該型別無法擴充套件。
最終型別的示例
class final_abc; //Class which is to be made final class abc { private: abc(){cout<<"abc constructor";} friend class final_abc; }; class final_abc : virtual abc //made it final class. { public: final_abc(){cout<<"Final class constructor";} }; class derive : public final_abc; //Error can't be extended
語法
template <class T> is_final;
引數
該模板可以僅具有型別 T 的引數,並檢查給定型別是否為最終型別。
返回值
它返回一個布林值,如果給定型別為最終型別,則返回 true,如果給定型別不是最終型別,則返回 false。
示例
Input: class final_abc; class abc { friend class final_abc; }; class final_abc : virtual abc{ }; is_final<abc>::value; Output: False Input: class final_abc; class abc { friend class final_abc; }; class final_abc : virtual abc{ }; is_final<final_abc>::value; Output: True
示例
#include <iostream> #include <type_traits> using namespace std; class TP { //Same if it will be a structure instead of a class }; class T_P final { //Same if it will be a structure instead of a class }; int main() { cout << boolalpha; cout << "Using is_final"; cout << "\nTutorials Point: "<<is_final<TP>::value; cout << "\nT_P Final: "<<is_final<T_P>::value; cout << "\ncheck for char: "<<is_final<int>::value; return 0; }
輸出
如果我們執行以上程式碼,它將生成以下輸出 −
Using is_final Tutorials Point: false T_P Final: true check for char: false
示例
#include <iostream> #include <type_traits> using namespace std; union TP { //Union }; union T_P final { //Union }; int main() { cout << boolalpha; cout << "Using is_final"; cout << "\nTutorials Point: "<<is_final<TP>::value; cout << "\nT_P Final: "<<is_final<T_P>::value; cout << "\ncheck for char: "<<is_final<int>::value; return 0; }
輸出
如果我們執行以上程式碼,它將生成以下輸出 −
Using is_final Tutorials Point: false T_P Final: true check for char: false
廣告