Kelas is_pod
Menguji apakah jenisnya adalah POD.
template <class T>
struct is_pod;
T
Jenis yang akan dikueri.
is_pod<T>::value
adalah true
jika jenis T adalah Data Lama Biasa (POD). Jika tidak, itu adalah false
.
Jenis aritmatika, jenis enumerasi, jenis pointer, dan jenis pointer ke anggota adalah POD.
Versi yang memenuhi syarat cv dari jenis POD adalah jenis POD itu sendiri.
Array POD itu sendiri adalah POD.
Struct atau union, yang semua anggota data non-statis-nya adalah POD, adalah POD itu sendiri jika memiliki:
Tidak ada konstruktor yang dideklarasikan pengguna.
Tidak ada anggota data privat atau non-statis yang dilindungi.
Tidak ada kelas dasar.
Tidak ada fungsi virtual.
Tidak ada anggota data non-statis dari jenis referensi.
Tidak ada operator penetapan salinan yang ditentukan pengguna.
Tidak ada destruktor yang ditentukan pengguna.
Oleh karena itu, Anda dapat secara rekursif membangun struktur dan array POD yang berisi struct dan array POD.
// std__type_traits__is_pod.cpp
// compile with: /EHsc
#include <type_traits>
#include <iostream>
struct trivial {
int val;
};
struct throws {
throws() {} // User-declared ctor, so not POD
int val;
};
int main() {
std::cout << "is_pod<trivial> == " << std::boolalpha
<< std::is_pod<trivial>::value << std::endl;
std::cout << "is_pod<int> == " << std::boolalpha
<< std::is_pod<int>::value << std::endl;
std::cout << "is_pod<throws> == " << std::boolalpha
<< std::is_pod<throws>::value << std::endl;
return (0);
}
is_pod<trivial> == true
is_pod<int> == true
is_pod<throws> == false
Header:<type_traits>
Namespace: std