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

更新於: 2020 年 3 月 23 日

146 次瀏覽

開啟你的 職業生涯

完成課程並獲得認證

開始學習
廣告