在C++11之前,可以使用std::is_pod
模板類來判斷一個類型是否是POD(Plain Old Data)類型。示例如下:
#include <iostream>
#include <type_traits>
struct A {
int x;
};
struct B {
int x;
int y;
};
int main() {
bool is_A_pod = std::is_pod<A>::value;
bool is_B_pod = std::is_pod<B>::value;
std::cout << "A is POD: " << is_A_pod << std::endl;
std::cout << "B is POD: " << is_B_pod << std::endl;
return 0;
}
在C++11及以后的版本中,可以使用std::is_standard_layout
和std::is_trivial
來判斷一個類型是否是POD類型。示例如下:
#include <iostream>
#include <type_traits>
struct A {
int x;
};
struct B {
int x;
int y;
};
int main() {
bool is_A_pod = std::is_standard_layout<A>::value && std::is_trivial<A>::value;
bool is_B_pod = std::is_standard_layout<B>::value && std::is_trivial<B>::value;
std::cout << "A is POD: " << is_A_pod << std::endl;
std::cout << "B is POD: " << is_B_pod << std::endl;
return 0;
}
以上示例中,類型A是POD類型,因為它是標準布局且是平凡的,而類型B不是POD類型,因為它有多個成員變量。POD類型通常是一種簡單的數據結構,沒有虛函數、基類、成員包含非POD類型等。