C++之POD类型

前言

  • POD(Plain Old Data)是C++中非常重要的一个概念,用来描述一个类型的属性。其中Plain表示这个类型是个平凡的类型,Old表示其与C的兼容性(就意味着可以使用 memcpy() 函数进行操作)。

  • C++11中将POD划分为两个基本概念:平凡的(trival)标准布局(standardlayout)

平凡(trival)

  • 满足条件
    1. 不能写 构造/析构函数拷贝/移动构造函数拷贝/移动赋值运算符,而是用编译器自动为我们生成,那这个数据就是“平凡的”。非要写的话,用 C++ 11 的 default 关键字。
      • C++为我们提供了一个类模板来识别一个类是否平凡:template <typename T> struct std::is_trival
    2. 不能有 虚函数虚基类

标准布局

  • 满足条件

    1. 普通成员有相同的访问级别
    2. 第一个成员必须是自己的(也即类中第一个非静态成员的类型与其基类不同)
    3. 只要有父类,普通成员只能在其中一个类中,不可分散(也即派生类中有非静态成员,且只有一个仅包含静态成员的基类或者基类有非静态成员,而派生类没有非静态成员)
    4. 没有虚函数和虚基类
    • C++提供了一个模板来判断一个类或者结构体是否是标准布局:template <typename T> struct std::is_standard_layout; //头文件为<type_traits>

    • C++提供了一个模板来判断一个类或者结构体是否是POD:template <typename T> struct std::is_pod //头文件为<type_traits>

POD的好处

  1. 字节赋值,我们可以放心的使用memsetmemcpy对POD类型进行初始化和拷贝。

  2. 提供对C内存的兼容。POD类型的数据在C与C++间的操作总是安全的。

  3. 保证了静态初始化的安全有效。POD类型的对象初始化往往更简单

-------------本文结束感谢您的阅读-------------
谢谢你请我吃糖果!
0%