1.pass-by-value的情况:
缺省情况C++以pass-by-value(继承C的方式)传递对象至(或来自)函数。函数参数都是以实际参数的复件为初值,调用端所获得的也是函数返回值的一个复件,复件由对象的拷贝构造函数产出,可能使pass-by-value成为耗时的操作。
2.耗时的原因
类的对象作为函数参数时,如果使用值传递,要先拷贝一份实参的副本,需要调用类的拷贝构造函数,函数结束时副本被销毁,需要调用析构函数。如果该类是派生类,调用的函数更多,流程更多更复杂。
拷贝构造函数
拷贝构造函数的调用:如果一个新对象被定义,一定会有一个构造函数被调用,如果没有新对象被定义,就不会有构造函数被调用。
3.pass-by-reference的优势
①pass-by-reference:没有任何构造函数或析构函数被调用,因为没有任何对象被新建。参数声明中加上const,防止传入的对象被修改。
②*避免slicing(对象切割)问题
值传递:子类对象被切割成父类对象,功能缺失
引用传递:解决该问题
4.pass-by-reference的底层本质
reference往往以指针的形式实现,传递的是指针
对象为内置类型(如int),STL的迭代器和函数对象,pass-by-value高效一些。
5.pass-by-reference的举例
class A{…};
void action(A a);//值传递pass-by-value
void action(const A& a);//引用传递pass-by-reference
原文链接: https://www.cnblogs.com/fan-0802-WHU/p/10953721.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/295932
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!