C++中值传递(pass-by-value)和引用传递(pass-by-reference)
发布日期:2022-02-10 11:37:03 浏览次数:52 分类:技术文章

本文共 670 字,大约阅读时间需要 2 分钟。

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://blog.csdn.net/Fan_z_0802/article/details/90711031 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:操作系统同步互斥问题
下一篇:python的模块导入

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月05日 14时31分06秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章