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

  • 相关阅读:
    0429 Scrum团队成立与第6-7章读后感
    0428 团队2.0
    0422 寻找数学口袋精灵BUG
    0422 Step2-FCFS调度
    0415 博客评价
    0414 结对--软件再升级(韩麒麟 列志华)
    0408 结对做汉堡
    0406 复利计算器--结对 组员 韩麒麟 列志华
    0405 构建之法第4章 读后感
    文法分析
  • 原文地址:https://www.cnblogs.com/fan-0802-WHU/p/10953721.html
Copyright © 2011-2022 走看看