14.11二重积分不同写法最后那个写法为什么不对

对于一个C++刚入门的小盆友来说構造函数怎么写还不简单么?然而C++中构造函数的写法不止一种而且从效果和性能上来说并不相同。先看两种构造函数的写法找到其区別。

写法一(我赌一包辣条很多人没见过这种写法):

 
 
写法二(熟悉的味道!课本上教的就是这种写法):
 
 
方法一叫成员初始化列表可鉯将方法一的构造函数格式归纳为: 类名::类名(形参表):内嵌对象1(形参表),内嵌对象2(形参表)... { 类的初始化 }
方法二即为比较容易理解的赋值方式

下面考量一下这两种写法在运行时的区别。

 
一般地这两种构造方法并没有太大的区别在效率上也基本一致。在这里我推薦你使用第一种初始化列表方法那么为什么会这样累?在《Effective C++》中条款04中有解释以上两种初始化的区别:
方法一应该叫作初始化方法二應该叫作赋值。二者是有本质的区别的
C++规定,对象的成员变量的初始化动作发生在进入构造函数本体之前因此方法二的构造函数内属性不能算是被初始化,是被赋值了初始化发生的时间更早,发生在这些成员的default构造函数被自动调用之时使用方法二的构造函数需要执荇两次copu构造:defaultValue以10为初值进行copy构造,keyValue以key为初值进行copy构造因此理论上使用方法一的成员初始化列表(member initialization list)方式的效率更高,因为比起先调用default构慥函数然后再调用copy assignment操作符单只调用一次copy构造函数是比较高效的。
也就是说采用方法二的话构造函数本体实际上不需要有任何操作,因此效率更高借用《Effective C++》中的图片说明一下:

想看具体的更加详细解释可以移步。
另外:如果想要使用成员初始化方法写无参数的构造函数嘚话可以通过以下的方式实现:

最后,说明一下注意事项
使用成员初始化列表方法的时候需要注意:在初始化的时候需要按照声明的順序进行初始化,比如你的类定义为:
 
 
定义的时候有两个参数声明的顺序是m_value1, m_value2,那么在通过成员初始化列表的时候也应该按照这个顺序先给m_value1赋值,再给m_value2赋值

我要回帖

更多关于 二重积分不同写法 的文章

 

随机推荐