trivial/nontrival函数
这里想谈一下,关于c++中的trivial和nontrivai的成员函数,主要对应于以下几个函数:
- 默认构造函数(default constructor)
- 拷贝构造函数(copy constructor)
- 拷贝赋值操作符(copy assignment operator)
- 析构函数(destructor)
对于默认构造函数和析构函数来说,trivial就是什么都不做,对于拷贝构造函数和拷贝赋值来说,就是内存复制(类似于memcpy)。为了使成员函数满足上述要求,类必须具有非常简单的结构,如果满足以下三条中任一条: - 显式(explict)定义了这四种函数。
- 类里有非静态非POD的数据成员。(POD,Plain Old Data,POD意思是Plain Old Data,也就是C++的内置类型或传统的C结构体类型(C风格的struct结构体定义的数据结构)。POD类型必然有以上四种函数)
- 有基类
则称该函数是non- trivial。对于trivial,则有对应的几点要求: - 它是隐式定义的(编译器合成的)
- A没有虚函数,也没有虚基类(如果类具有虚函数,那么在创建该类的对象(初始化虚方法表等)时,它将需要一些额外的隐藏初始化,因此该类的构造函数不会被认为是trivial;如果一个类有虚基类,那么这个类的每个对象都可能包含指向同一个对象的其他部分的隐藏指针,初始化这些指针就需要额外的操作)
- 所有A的直接基类对应函数都是trival
- 所有非静态数据成员的类都有trivial函数
好处:判断如果一个类的函数(如析构)是trivial,就什么都不做,节省时间和内存,如果是non-trivial,就需要调用相应的函数操作
trivial/nontrival函数相关推荐
- trivial,non-trival, pod
Trivial(平凡)和Non-Trivial(不平凡)是对于class(类)的或者类中的四个函数而言的: 1.构造函数 2.拷贝构造函数 3.赋值函数 4.析构函数 Trivial 其中Trivia ...
- C++中的trivial和non-trivial构造/析构/拷贝/赋值函数及POD类型
在侯捷的<STL源码剖析>里提到trivial和non-trivial及POD类型,相关知识整理如下. trivial意思是无意义,这个trivial和non-trivial是对类的四种函 ...
- C++ =default 和 = delete 以及 trival 和 nontrival
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vecto ...
- html5虚线绘制的函数,HTML5 Canvas绘制圆点虚线实例
html5 canvas 提供了很多图形绘制的函数,但是很可惜,canvas api只提供了画实线的函数(lineto),却并未提供画虚线的方法.这样的设计有时会带来很大的不便,<javascr ...
- move std 函数 示例_确保(值类型)可拷贝类有默认构造函数
C.43: Ensure that a copyable (value type) class has a default constructor C.43:确保(值类型)可拷贝类有默认构造函数 Re ...
- C++ trivial和non-trivial构造函数及POD类型(转)
原博客地址http://blog.csdn.net/a627088424/article/details/48595525 最近正纠结这个问题就转过来了,做了点补充(参考<深度探索C++对象模型 ...
- ajax 成功回调函数,jQuery的阿贾克斯成功回调函数定义jQuery的阿贾克斯成功回调函数定义(jQuery ajax...
我想使用jQuery的ajax从服务器获取数据. 我希望把成功的回调函数定义外面.ajax()块像下面这样. 所以,我需要声明变量dataFromServer像下面这样我就能从成功回调使用返回的数据? ...
- 如何在gvim中安装autoproto自动显示函数原型
cankao: http://www.vim.org/scripts/script.php?script_id=1553 注意, 在gvim中执行的命令, :foo和:!foo 的区别, 跟vim一样 ...
- Chap2-构造函数语意学
如果一个类没有任何constructor,那么会有一个default constructor被隐式的声明出来,一个implicit default constructor将是一个trivial(无用的 ...
- STL源码剖析 内存基本处理工具 初始化空间的五个函数
初始化空间的五个函数 构造函数 construct() 析构函数 destroy() 剩余三个底层函数 和 高层函数之间的对应关系如下 uninitialized_copy() 对应 copy() ...
最新文章
- .svn文件夹_新建SVN仓库并上传项目
- 我的第一篇博客,以此写写内心的独白
- 【D3.V3.js系列教程】--(十四)有路径的文字
- k均值算法 二分k均值算法_如何获得K均值算法面试问题
- hihoCoder 1092 : Have Lunch Together
- onpagefinished等了很久才执行_今天自律了吗?停课不停锻炼 才是战疫正确姿势
- 阿呆做网站(1)--基本功能
- LM NTLM ophcrack RainBow table (转)
- POJ3641 UVA11287 HDU1905 Pseudoprime numbers【素数判定+快速模幂】
- JAVA零基础入门书籍推荐
- 定时自动按键软件_这些只有几MB的软件,让你的Windows系统更好用
- mysql stmt语法_PHP mysqli_stmt_get_result() 函数用法及示例
- Redux开发实用教程
- IT群侠传第二回一专多能
- 单片机调试 — Event Recorder 的使用
- itextpdf生成pdf,指定样式及文字水印
- device-mapper: multipath: Failing path recovery
- K-means聚类算法及其各种变形模型的实验分析
- android api版本修改,Android 版seesmic修改API方法
- 玩转Python量化金融工具之NumPy