C++ 中的 is_standard_layout 模板
在本文中,我們將討論 C++ STL 中 std::is_standard_layout 模板的工作原理、語法和示例。
is_standard_layout 是一個位於 `
什麼是 C++ 中的標準佈局?
標準佈局型別是一種具有簡單線性結構(如我們在陣列中看到的那樣)和訪問控制的型別,可以輕鬆地用於與其他程式語言編寫的程式進行通訊。這是一種以“一套程式碼適用於所有程式語言”的理念編寫的型別。
標準佈局類具有以下特徵:
- 它不應具有虛擬函式或虛類。
- 所有類必須具有相同的訪問控制(public、private、protected)。
- 不應具有非靜態資料型別。
- 其基類不應與其第一個非靜態資料型別相同。
語法
template <class T>is_standard_layout;
引數
該模板只能具有型別為 T 的引數,並檢查 T 是否為標準佈局型別。
返回值
它返回一個布林值,如果給定型別是標準佈局型別,則返回 true;如果給定型別不是標準佈局型別,則返回 false。
示例
Input: is_standard_layout<int>::value; Output: True Input: class A{ int a; }; class B : public A { int b; }; is_standard_layout<B>::value; Output: False
示例
#include <iostream> #include <type_traits> using namespace std; class TP { int var; }; struct TP_2 { int var; private: int var_2; }; union TP_3 { }; int main() { cout << boolalpha; cout << "checking for is_standard_layout template for class : "<< is_standard_layout<TP>::value; cout << "\nchecking for is_standard_layout template for structure: "<< is_standard_layout<TP_2>::value; cout << "\nchecking for is_standard_layout template for union : "<< is_standard_layout<TP_3>::value; cout << "\nchecking for is_standard_layout template for char : "<< is_standard_layout<char>::value; cout << "\nchecking for is_standard_layout template for int : "<< is_standard_layout<int>::value; return 0; }
輸出
如果我們執行上述程式碼,它將生成以下輸出:
checking for is_standard_layout template for class : true checking for is_standard_layout template for structure: false checking for is_standard_layout template for union : true checking for is_standard_layout template for char : true checking for is_standard_layout template for int : true
示例
#include <iostream> #include <type_traits> using namespace std; class TP { int var; }; class TP_2 { int var; private: int var_2; }; class TP_3 { }; int main() { cout << boolalpha; cout << "checking for is_standard_layout template for class with one variable : "<< is_standard_layout<TP>::value; cout << "\nchecking for is_standard_layout template for class with one private variable: "<< is_standard_layout<TP_2>::value; cout << "\nchecking for is_standard_layout template for class with no variable : "<< is_standard_layout<TP_3>::value; cout << "\nchecking for is_standard_layout template for int * : "<< is_standard_layout<int*>::value; cout << "\nchecking for is_standard_layout template for float : "<< is_standard_layout<float>::value; return 0; }
輸出
如果我們執行上述程式碼,它將生成以下輸出:
checking for is_standard_layout template for class with one variable : true checking for is_standard_layout template for class with one private variable: true checking for is_standard_layout template for class with no variable : true checking for is_standard_layout template for int * : true checking for is_standard_layout template for float : true
廣告