📜  std::is_standard_layout - C++ (1)

📅  最后修改于: 2023-12-03 14:47:42.770000             🧑  作者: Mango

std::is_standard_layout - C++

简介

std::is_standard_layout是C++11中的一个type trait,用于判断类型是否为标准布局类型。

标准布局类型定义如下:

  • 所有非静态成员均为标准布局类型;
  • 所有非静态成员均为相同类型;
  • 基类只能是标准布局类型或者空类;
  • 不能含有虚函数,虚基类,私有或受保护非静态数据成员,非静态成员函数和用户自定义构造和析构函数。
语法
template< class T >
struct is_standard_layout;
返回值

如果T是标准布局类型,则std::is_standard_layout<T>::valuetrue,否则为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类型需要使用标准布局类型作为其模板参数。

参考链接