引用形式传参,int &a,vector<int> &a,const vector<int> &a

首先介绍一下为什么我们要使用引用形式进行参数传递。
我们写一个函数 void fun(int a,int b),这样的函数调用时是不会改变参数的值的,在函数中也就是以一个局部变量的形式存在,当函数结束时,变量a,b的生命周期也就结束了。
而对于 void fun(int &a,int &b),这种形式进行参数传递,其实是一种指针的形式,如果在函数内我们改变了a,b的值,当函数结束后,原来的值也将被改变。

当参数是较大的数据结构类型时,而且我们不需要改变原变量中的值,那么我们为什么要使用void fun(vector<int> &a),而不使用void fun(vector<int> a)呢,因为void fun(vector<int> a)需要对原变量进行一次复制操作,即使两个变量名是相同的由于作用域不同,所以其实是两个变量,所以需要一次复制操作,因此当数据大小较大时是非常浪费时间的。

那么自然的就引出了这样的问题,我们使用void fun(vector<int> &a)不需要进行复制操作,但是不小心在函数中改变了参数的值不就得不偿失了。所以就有了void fun(const vector<int> &a)这样的结构,我们都知道const关键字定义的变量是不可以被改变的,所以当我们进行常量引用时既不会进行复制操作,当误操作时又不能编译通过,两全其美。

区别:

void swap(int * a,int * b){

  int temp;

  temp = *a;

  *a = *b;

  *b = temp;

}


void swap(int  a,int  b){

  int temp;

  temp = a;

  a = b;

  b = temp;

}


版权声明:尊重原创,转载请标明:转自http://blog.csdn.net/hk_john https://blog.csdn.net/Hk_john/article/details/72459549
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章