《STL源码剖析》学习笔记(二):POD与trivial函数

书中72~73页第一次提到POD型别,“POD意指Plain Old Data,也就是标量型别(scalar types)或传统的C struct型别。POD型别必然拥有trivial ctor/dtor/copy/assignment 函数。”
万脸懵逼?!啥?
查了一下单词,这个trivial的意思是 不重要的,琐碎的,微不足道的。而构造函数ctor,复制构造函数copy,赋值函数assignment,析构函数dtor,这些显然都是必需品呀,为啥不重要?再查了查,还有无意义的意思,而non-trivial表示有意义的。
翻看了一些博客,这里这个trivial本质上是指默认函数(default),也就是那些我们没有定义的默认构造函数、析构函数等,例如:

#include <iostream>
using namespace std;

class A
{
private:
    int x, y;
public:
    void show() const { cout << x << " " << y << endl; }
};

int main()
{
    A lala;// ctor
    lala.show();
    A haha = lala; // copy
    haha.show();
    A aaaa;
    aaaa = haha; // assignment
    aaaa.show();
    return 0;
}

所以这里这个类A就应该是POD型别啦!但是!
翻阅到书325页,“编译器之中,有能力验证‘用户自定义型别’之型别特性者极少,程序中所有的用户自定义型别,都被编译器视为拥有non-trivial函数,我们得自己动手为它做特性设定,才能保证编译器知道它的身份”。
当编译器知道某个型别为POD型别时,对于这个型别的各种操作,都可以采用最有效率的措施,例如用内存直接处理操作(如malloc()、memcpy()等),使用traits来萃取型别,见书104页。
关于C++POD的详细说明,请参考这位朋友的博客C++POD
我看到也有博客说POD是C风格的struct结构体定义的数据结构。好像也可以这样理解。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值