📅  最后修改于: 2023-12-03 14:47:42.770000             🧑  作者: Mango
std::is_standard_layout
是C++11中的一个type trait,用于判断类型是否为标准布局类型。
标准布局类型定义如下:
template< class T >
struct is_standard_layout;
如果T
是标准布局类型,则std::is_standard_layout<T>::value
为true
,否则为false
。
#include <iostream>
#include <type_traits>
struct A {
int x;
double y;
};
struct B {
int x;
int y;
};
struct C : A, B {};
struct D {
virtual void foo() {}
};
int main() {
std::cout << std::boolalpha;
std::cout << std::is_standard_layout<A>::value << std::endl; // true
std::cout << std::is_standard_layout<B>::value << std::endl; // true
std::cout << std::is_standard_layout<C>::value << std::endl; // false
std::cout << std::is_standard_layout<D>::value << std::endl; // false
return 0;
}
标准布局类型在C++11标准中没有明确用途,但是C++17中新增std::byte
类型和std::aligned_union
类型需要使用标准布局类型作为其模板参数。