C++中的trivial、standard layout、POD

在学习STL的时候,会反复出现trivial和POD这样的术语,这几个概念如果要特别仔细地区分,只能说是蛋疼。

但是结合其在STL里面的用意,为了性能优化,不那么学究地去考究其意义还是相对好理解的。

trivial是从其拷贝控制函数是否是系统合成的来说明的

standard layout是从其内部布局是否类似于C中的struct来说明的

POD(Plain Old Data)这里的Old就是指的C语言的意思,它是从所有行为是否基本类似于C中的struct来说明的

所以,POD比trivial和standard layout更加严格,是POD必定满足trivial和standard layout

这个帖子对这三个概念做了详细描述,以及实验比较,非常好。

http://blog.csdn.net/gzxcyy/article/details/21009703


下面来详细说说trivial和POD,参考资料是www.cplusplus.com/reference

它里面的解释和C++标准几乎一模一样

1.trivial

(1)scalar types

(2)trivial classes

(3)arrays of any such types(1,2)

其中(1)说穿了就是系统内置类型,(2)说穿了就是满足一定要求的类类型(由C++关键字class、sturct、unoin定义),(3)以上两种类型的数组

下面来详细说说,这个满足一定要求是满足哪些要求:

①拥有合成的默认构造函数、合成的拷贝构造函数、合成的移动构造函数

合成的拷贝赋值运算符、合成的移动构造运算符、合成的析构函数

②没有虚成员(不含虚函数以及虚基类)

③没有类内初始化的非静态数据成员

④如果它拥有基类或者非静态成员,它们也应该是trivial的


2.POD

(1)scalar types

(2)trivial classes

(3)arrays of any such types(1,2)

非常类似于trivial的要求,其中(2)表示的意思基本可以认为它既是trivial也是standard layout的


3.POD的作用

STL会根据对象是否是POD类型的,从而影响到对于这个对象的构造与析构的过程。

如果是非POD,当然为了安全就老老实实调用构造函数和析构函数了。

如果是POD类型,这个类型就完全可以当做C语言中的数据结构来处理,对其构造时完全不用初始化为确定值,对其析构时可以什么也不做,

而不会引发额外的风险(超过C语言本身的风险),从而提升效率。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值