引用形式傳參,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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章