UE学习日志#20 C++笔记#6 基础复习6 引用2
3.1 const引用传递
const 引用的参数的主要目的是效率。当将值传递给函数时,便会生成一个完整副本。传递引用时,实际上只是传递指向原始对象的指针,因此计算机无须生成副本。通过 const 引用传递,可以做到二者兼顾:不生成任何副本,并且无法更改原始变量。当处理对象时,const 引用变得更重要,因为对象可能很大,并且对其进行复制可能会产生有害的副作用。下面的示例演示如何将 std:string 作为 const 引用传递给函数:
void printString (const string& myString){
cout << myString << endl;
}
int main(){
string someString {"Hello World"};
printString (someString) ;
printString ("Hello World"); // Passing literals works.
}
3.2 值传递和引用传递
当要修改参数并希望那些更改能够作用于传给函数的变量时,需要通过引用传递。但是,不应将引用传递的使用局限于那些情况。引用传递避免将实参复制到函数,从而提供了两个附加好处:
1.效率:复制大型的对象可能花费很长时间,引用传递只是将该对象的一个引用传给了函数
2.支持:不是所有的类都允许值传递
如果你想利用这些好处,但又不想修改原始对象,则应将参数标记为 const,从而可以传递 const引用。
注意:
引用传递的这些好处意味着,应该只在对于简单的内置类型,例如 int 和 double,且无须修改实参的时候使用值传递。如果需要将对象传递给函数,则更应该使用 const 引用传递而不是值传递。这样可以防止不必要的复制。如果函数需要修改对象,则通过对非 const 的引用将其传递。(在引入了移动语义之后,对该规则进行了稍微修改,允许在某些情况下对对象使用值传递。)
4 引用作为返回值
函数也可以返回引用。当然,只有在函数终止后返回的引用所指向的变量继续存在的情况下,才可以使用此方法。
警告:
切勿返回作用域为函数内部的局部变量的引用,例如在函数结束时将被销毁的自动分配的栈上变量。
返回引用的主要原因是,能够直接把返回值作为左值(赋值语句的左侧)对其赋值。几个重载的运算符通常会返回引用,例如,运算符=、+=等。
注:今天有事出去了,这篇内容算赶的。