c++11 pod类型

pod简介

P for plain(平凡)
o for old(和c兼容,可以使用c的memcpy和memset进行拷贝和初始化)
pod划分为两类:
1.平凡类型
2.标准布局

trivial(平凡)定义:

1.拥有默认的构造和析构函数。但是一旦定义了构造函数,哪怕是无参甚至没有内部没有任何代码片段的构造函数,那么该构造函数也不再是trivial类型。例如:

  • 如何将此类定义改变为trivial类型
struct NoTrivial() {
  NoTrivial();
}
Notrivial::Notrivial()= default;

2.拥有默认的拷贝构造函数和移动构造函数
3.拥有默认的赋值运算符
4.不能包含虚函数以及虚基类
可以使用

 template <typename T> struct std::in_trivial;

判断T是否为trivial类型

标准布局

1.所有非静态成员有相同的访问权限

struct Travial {
 public:
  uint32_t a;
  uint32_t b;
};
struct NoTravial {
 public:
  uint32_t a;
 private:
  uint32_t b;
};

2.在类或者结构体继承时,满足一下两种情况之一:
1)派生类中有非静态成员,且只有一个仅包含静态成员的基类
2)基类的非静态成员,而派生类没有非静态成员
3)类中第一个非静态成员的类型与其基类不同

  struct NoStandard : public A {
    A a;
  }
  struct Standard : public A {
    uint32_t b;
    A a;
  }

4)没有虚函数和虚基类
5)所有非静态数据成员均符合标准布局类型,其基类也符合标准布局
可以使用

template <typename T> struct std::is_standard_layout;

来判断类型是否为一个pod类型可使用

template <typename T> struct std::is_pod;
使用pod的好处

1.字节赋值,可以使用memset和memcopy
2.提供对c的内存布局兼容;
3.保证了静态初始化的安全有效。静态初始化可以在很多时候提高程序的性能,而pod类型的对象初始化往往更加简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值