C++ 中的 is_standard_layout 模板


在本文中,我們將討論 C++ STL 中 std::is_standard_layout 模板的工作原理、語法和示例。

is_standard_layout 是一個位於 `` 標頭檔案下的模板。此模板用於檢查給定的型別 T 是否為標準佈局型別。

什麼是 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

更新於:2020年3月23日

209 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告