本章之前在C++primer上看到过,N年前的东西,但是一直不太清楚,并且终于发现了以前自己没太注意的一个点。。。

 

本章节主要涉及const引用、普通引用、值传递三方面的内容;

英文称之为:pass-by-reference-to-const\pass-by-reference\pass-by-value;

 

使用pass-by-reference-to-const的几个优点:

1.避免拷贝:

其实这是普通引用和const引用的优点;

当使用pass-by-value进行传递时,其实算是拷贝传递,这时会调用构造函数;

而离开函数作用域时必定也会使用析构函数;

当类成员过多的情况下,会导致大量的时间开销,所以pass-by-value并不算一个特别好的解决办法;

 

2.可以对于多态有很大的帮助:

这一条是pass-by-reference和pass-by-value所不可比拟的优点;

当我们使用多态继承链时,对于类外函数进行传递,往往无法获得具体的子类信息,而采用基类形参进行传递;

但是如果使用上述两种方式,会导致无法调用多态函数,只能调用基类函数,从而使得多态失效;

所以在继承链中最好是用pass-by-reference-to-const来进行传递;

 

3.可以传递右值:

老生常谈的性质,之前刷题传参用过多次,只有这种方式可以使得函数实参为右值,而非必定左值;

 

补充的问题:

之前遗漏的点需要补充一下:

1.关于const引用是否可变的问题:

主意,const引用得到的变量为const变量,无法在函数内修改,以前刷题没注意,都不知道怎么整的。。。这次专门做了实验才发现;

 

2.关于for/auto的问题:

这里注意下,for(auto:)这种形式相当于默认拷贝,在循环内赋值并不改变其左值,如果想改变必须要改为for(auto&:)形式;

 

版权声明:本文为songlinxuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/songlinxuan/p/14103551.html