大家都知道,C++ 语言有一种 很好用的 也是很常用的技术 叫做引用,这个是在C语言的基础上的一个扩冲,类似指针,只是在声明的时候用&取代了* , 引用可以看作是被引用的一个别名,在声明时必须同时进行初始化。
1.函数参数的引用
#include<iostream> using namespace std; void swap(int &a, int &b); int main() { int num1 = 10; int num2 = 20; cout<<num1<<" "<<num2<<endl; swap(num1, num2); cout<<num1<<" "<<num2<<endl; return 0; } void swap(int &a, int &b) { int temp = a; a = b; b = temp; }
2.函数引用返回值
在C++中非void型函数需要返回一个返回值,类似函数形参,我们同样可以将函数的返回值声明为引用。普通的函数返回值是通过传值返回,即将关键字return后面紧接的表达式运算结果或变量拷贝到一个临时存储空间中,然后函数调用者从临时存储空间中取到函数返回值。
#include<iostream> using namespace std; int valplus(int &a); int main() { int num1 = 10; int num2; num2 = valplus(num1); cout<<num1<<" "<<num2<<endl; return 0; } int valplus(int &a) { a = a + 5; return a; }
valplus函数采用的是普通的传值返回,也即将变量a的结果加上5之后,将结果拷贝到一个临时存储空间,然后再从临时存储空间拷贝给num2变量。 当我们将函数返回值声明为引用的形式时,如例5所示。虽然例5运行结果和例4是相同的,但例5中的valplus函数在将a变量加上5之后,其运算结果是直接拷贝给num2的,中间没有经过拷贝给临时空间,再从临时存储空间中拷贝出来的这么一个过程。这就是普通的传值返回和引用返回的区别。
#include<iostream> using namespace std; int & valplus(int &a); int main() { int num1 = 10; int num2; num2 = valplus(num1); cout<<num1<<" "<<num2<<endl; return 0; } int & valplus(int &a) { a = a + 5; return a; }