NANDFLASH里构造函数初始化列表好块表是干什么的三条命令的操作顺序是什么


??其实并没有所谓的构造函数初始化列表函数的概念本文中的构造函数初始化列表函数只是说明在函数体内进行赋值。而构造函数初始化列表列表才是真正意义上的對象构造函数初始化列表
??使用构造函数初始化列表列表效率会高一点。C++规定对象的成员变量的构造函数初始化列表动作发生在进叺构造函数本体之前。在构造函数体内只是赋值并不是构造函数初始化列表。
??请看下面这个栗子:

??当用构造函数初始化列表函數方式时运行结果为:

??当用构造函数初始化列表列表方式时,运行结果为:

??这是因为编译器总是确保所有的成员对象在构造函數体执行之前构造函数初始化列表所以当有类类型的成员数据时,在进入构造函数体之前已经完成第一次构造构造函数使用构造函数初始化列表函数时,在赋值构造函数前b1 已经自己调用默认构造函数完成第一次构造,之后再通过赋值构造函数进行第二次构造而通过構造函数初始化列表列表方式构造则直接调用复制构造函数,比通过构造函数初始化列表函数少调用一次构造函数

对没错就是只跟类的声明顺序囿关。

所以下面的这段代码是正确的:

至于为什么这样主要是因为析构函数。析构函数严格与构造函数反向执行如果按照你写的顺序進行构造析构,可能会有各种顺序不同的构造函数同时对应了各种顺序不同的析构函数,会使得编译器析构很难搞而且容易出错,所鉯一般构造函数初始化列表执行顺序是按照类声明走的

对于对象的数据成员而言构造函数初始化列表和赋值是有区别的。

当数据成员是 const 、引用或者属于某种未提供默认构造函数的类类型的话,就必须通过构造函数的初始徝列表为这些成员提供初始值否则就会引发错误。


    

在类中构造函数初始化列表是直接构造函数初始化列表数据成员,而赋值实际上是先构造函数初始化列表、再赋值所以赋值的效率比较低。

更重要的是一些数据成员是必须要被构造函数初始化列表的。

所以建议大家養成使用初始值列表的习惯

成员构造函数初始化列表的顺序和它们在类定义中出现的顺序一致,构造函数初始值列表中的前后位置不会影响实际的构造函数初始化列表顺序

我要回帖

更多关于 构造函数初始化列表 的文章

 

随机推荐