zoukankan      html  css  js  c++  java
  • 传引用和传值的区别和对象切割问题(二)

    传引用和传值的区别和对象切割问题

    reference往往以指针的形式实现出来,因此,pass by reference你可以看成是传指针

    而pass by value 就会拷贝一份临时的数据或者说对象

    对于内置类型 int double 效率上肯定是pass by value效率更高

    所以在STL中,很多时候都是pass by value

    那什么时候用pass by reference呢?

    答案是,除了之前的情况,大部分时候都要用pass by reference

    pass by value 还面临着对象切割的问题

    void function(A a)
    {
    	a.display();
    }
    
    
    class A
    {
    	void display()
    
    }
    class B:public A
    {
    	virtual void display()
    
    }
    
    

    对象切割slicing 就是传一个子类B的对象b作为参数

    但是在函数中调用

    b.display();
    

    的时候,会调用类A的display而不是类B的

    因为function的参数是A 而b以pass by value 传进来就会被切割

    总结一下

    一般而言,适用与pass by value的情况有以下三个 内置类型 STL的迭代器 函数对象

    其他的尽量用pass by reference

    1.尽量用pass by reference 替代 pass by value 前者更高效并且可避免对象切割问题

    2.以上规则不适用与内置类型、STL的迭代器 、函数对象,对于这三者而言,pass by value更恰当

  • 相关阅读:
    glusterfs 术语
    python 随便
    ubuntu glusterfs 配置调试
    源码生成deb包
    常用apt cli
    unexpected error ConnectionError object has no attribute
    [MFC]透明图展示
    菜鸟的mongoDB学习---(六)MongoDB 索引
    Keyboard的显示与隐藏
    HDU 4268 Alice and Bob(贪心+Multiset的应用)
  • 原文地址:https://www.cnblogs.com/yahoo17/p/12349691.html
Copyright © 2011-2022 走看看