zoukankan      html  css  js  c++  java
  • C++中值传递(pass-by-value)和引用传递(pass-by-reference)

    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

  • 相关阅读:
    笔记-[5]-关于JS事件流!
    JS中的模块化开发之Sea.JS
    利用JavaScript如何创建一个table表格[第2种方法]
    二维数组左滑删除某一行
    sdwebimage缓存图片
    scrollView中内部控件的悬停
    (转)将图片保存到相册
    离屏渲染
    标签栏隐藏
    iOS8新特性之交互式通知
  • 原文地址:https://www.cnblogs.com/fan-0802-WHU/p/10953721.html
Copyright © 2011-2022 走看看