博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中值传递(pass-by-value)和引用传递(pass-by-reference)
阅读量:4500 次
发布时间:2019-06-08

本文共 727 字,大约阅读时间需要 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://www.cnblogs.com/fan-0802-WHU/p/10953721.html

你可能感兴趣的文章
Django入门与实践
查看>>
一些面试题(3)
查看>>
算法一枚
查看>>
Spin lock 与mutex 的区别--2011.01.06
查看>>
Java resources
查看>>
python--异常处理
查看>>
MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1
查看>>
数论只会GCD。。。
查看>>
UVA 12506 Shortest Names
查看>>
利用 jQuery 来验证密码两次输入是否相同
查看>>
WIN7用户登录背景修改方法
查看>>
[转]HTTP请求行、请求头、请求体详解
查看>>
java基础之 超类Object
查看>>
C#中用webBrowser控件实现对Google地图的定位访问
查看>>
2016级算法期末上机-C.简单·Bamboo's Fight with DDLs III
查看>>
Android学习笔记之线程中调用UI控件
查看>>
maven:新建的maven工程需要添加一下插件
查看>>
Centos6.5下进行PHP版本升级
查看>>
An internal error occurred during: "Generating JAX-WS Web Services".Unable to create JAXBContext
查看>>
计算思维Computational Thinking
查看>>