Trivial(平凡)和Non-Trivial(不平凡)是对于class(类)的或者类中的四个函数而言的:

  1.构造函数

  2.拷贝构造函数

  3.赋值函数

  4.析构函数

Trivial

其中Trivial(平凡)的概念本人的理解是无意义的,Trivial是相对于Non-Trivial而言的。

Non-Trivial

对于Non-Trivial而言的,如果上面四种函数满足以下三点任意一项或一项以上:

  1.有基类

  2.显式(explict)定义了以上四种函数一种或以上

  3.类里有非静态非POD的数据成员

那么该类就是Non-Trivial(不平凡)有意义的,所以有意义(Non-Trivial)的函数都有一些“多余”的操作,和系统自动创建的默认缺省函数有些差别。而有意义(Non-Trivial)的类则是含有Non-Trivial的函数。


POD

POD(Plain Old Data)是指C风格的struct结构体定义的数据结构或者C++的内建类型。

C++ 03:对于POD对象,其二进制内容是可以随便复制的,在任何地方,只要其二进制内容在,就能还原出正确无误的POD对象。对于任何POD对象,都可以使用memset()函数或者其他类似的内存初始化函数。

如果一个类或结构是Trivial(平凡)的,具有标准布局的,且不包含任何非POD的非静态成员,那么它就被认定是POD类型。POD类型必然有以上提到的四种Trivial(平凡)函数。

平凡的类或结构定义如下:

  1.具有一个平凡的缺省构造器  (可使用default关键字)

  2.具有一个平凡的拷贝构造器  (可使用default关键字)

  3.具有一个平凡的拷贝赋值运算符(可使用default关键字)

  4.具有一个非虚且平凡的析构器

具有标准布局的类或结构被定义如下:

  1.所有非静态数据成员均为标准布局类型

  2.所有非静态成员的访问权限(public, private, protected) 均相同

  3.没有虚函数

  4.没有虚基类

  5.所有基类均为标准布局类型

  6.没有任何基类的类型与类中第一个非静态成员相同

  7.要么全部基类都没有非静态数据成员,要么最下层的子类没有非静态数据成员且最多只有一个基类有非静态数据成员。总之继承树中最多只能有一个类有非静态数据成员。所有非静态数据成员必须都是标准布局类型。

POD的优点 

  1.字节赋值, 代码中我们可以安全的使用memset和memcpy函数对POD类型进行初始化和拷贝等操作

  2.提供了对C内存布局的兼容,C++程序可以与C函数进行相互的操作,因为POD类型的数据在C++与C之间的操作总是安全的

  3.保证了静态初始化的安全有效,静态初始化在很多时候能够提高程序的性能,而POD类型的对象初始化往往更加简单(比如放在目标文件的.bss段,在初始化中直接被赋0)

trivial,non-trival, pod相关推荐

  1. C++ trivial和non-trivial构造函数及POD类型(转)

    原博客地址http://blog.csdn.net/a627088424/article/details/48595525 最近正纠结这个问题就转过来了,做了点补充(参考<深度探索C++对象模型 ...

  2. 深入理解C++11 读书笔记(三) 通用与专用

    继承构造函数 如果派生类并不需要改变构造函数,那么可以用新的using Base::Base直接继承基类的构造函数,基类构造函数很多的时候,这样做非常方便.如果派生类还有自己的成员需要初始化,可以利用 ...

  3. C++中POD和trival语义

    最近在看STL源码剖析,书中提到trivial destructor和no-trivial destructor,初次见到对trivial这个概念非常陌生,经过查资料,又发现一个陌生的概念POD,实在 ...

  4. C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型

    在侯捷的<STL源码剖析>里提到trivial和non-trivial及POD类型,相关知识整理如下. trivial意思是无意义,这个trivial和non-trivial是对类的四种函 ...

  5. C++11中的POD和Trivial

    引子 在介绍C++11的文章或者博客中,经常会出现POD类型和Trivial类型的影子.但是POD类型和Trivial类型到底是什么意思呢? POD类型 POD类型的好处 POD类型 粗略上来讲,PO ...

  6. C++11新特性之POD类型

    POD(Plain Old Data)是C++中非常重要的一个概念,用来描述一个类型的属性其中Plain表示这个类型是个平凡的类型,Old表示其与C的兼容性.C++11中将POD划分为两个基本概念:平 ...

  7. C ++中的POD类型是什么?

    我有几次遇到这个术语POD型. 这是什么意思? #1楼 POD代表普通旧数据 - 即没有构造函数,析构函数和虚拟成员函数的类(无论是使用关键字struct还是关键字class ). 维基百科关于POD ...

  8. C++ 11 中的POD

    POD 是英文中Plain Old Data 的缩写,意如其名. Plain 表示了POD 是普通的类型, C++中常见的类型都是这样的属性,而不像一些存在着虚函数虚继承的类型那么特别. Old 则体 ...

  9. C++11 POD类型

    POD,全称plain old data,plain代表它是一个普通类型,old代表它可以与c兼容,可以使用比如memcpy()这类c中最原始函数进行操作.C++11中把POD分为了两个基本概念的集合 ...

最新文章

  1. 计算机网络智能化在铁路通信的发展,计算机网络在铁路信号中的应用
  2. C# json解析字符串总是多出双引号_在JavaScript应用中将CSV转换为JSON
  3. 在vs2005中安装boost库
  4. Centos-挂载和卸载分区-mount
  5. 【结论】取石子游戏(jzoj 1211)
  6. Spring Batch –使用JavaConfig替换XML作业配置
  7. cont char *p 和 char* const p 区别及记忆方法
  8. EMC业务连续性和容灾服务
  9. Netty简单样例分析[转]
  10. Linux查看、运行和杀死java进程
  11. IBGP的自己下一跳,指定源命令。
  12. 07、Flutter FFI 数组
  13. 记录一下何同学采访苹果CEO库克的对话,感兴趣的快来围观
  14. 传说中WM手机工程测试命令
  15. Android音视频点/直播模块开发
  16. 影响stable diffusion的embedding训练效率的部分问题和拟解决办法
  17. 表字段的处理(Sql Server)
  18. lubcon turmogrease turmosynthgrease turmotemp
  19. 商城快递查询 (快递100)
  20. 前端必经之路:CSS页面布局(深入理解浮动布局、定位布局、圣杯布局和双飞翼布局等重要布局方案)

热门文章

  1. 若人工智能研发是登山,我们都经历了什么
  2. 一个基于vue3+vite+ts的完整项目
  3. c语言 用getchar和putchar实现字符串的输入输出
  4. cad中explode是什么意思_CAD中分解(炸开explode)命令无效
  5. 英语发音规则---X字母
  6. 关于iOS通话记录的问题
  7. 四个在家手机就能做的小项目,100+一天【10个项目】
  8. Echarts最新json地图文件
  9. C语言求二维数组平均数,一道JavaScript的二维数组求平均数的题
  10. 文件名.DM1 这是我碰到的第一个问题,这是什么文件类型呢