1. 程式人生 > >C++中一般引用作形參和常引用作形參的問題

C++中一般引用作形參和常引用作形參的問題

#include<iostream>

using namespace std;

int f(const int &a){return a;}

int g(int &a){return a;}

int h(int a){return a;}

int main(){

    int x=3;

    cout<<f(x)<<endl;

    cout<<f(3)<<endl;

    cout<<g(x)<<endl;

    //cout<<g(3)<<endl;//error: invalid initialization of non-const reference of type 'int&' from a temporary of type 'int'

    //error: in passing argument 1 of `int g(int&)'

    cout<<h(x)<<endl;

    cout<<h(3)<<endl;

    }

 

常數沒有地址,對於常數的引用必須是個const&,

同樣的,如果x是個const的話,int g(int &a){return a;}也會報錯:

 

結論:

如果不需改變形參的值又不用作引數傳遞(實參賦值給形參),用常引用作形參適應面最廣:實參可以是變數也可以是常量。

如果需要改變形參的值,用引用作形參最合適:實參必須是變數不允許是常量。

如果不需改變形參的值又可以用作引數傳遞(實參賦值給形參),用普通變數作形參:多了傳遞引數的開銷。

 

對比一般引用作形參和常引用作形參

一般引用作形參:

  1. 不用作引數傳遞(實參賦值給形參),節省開銷,提高效率。
  2. 函式可以改變形參的值
  3. 實參不能是常量

常引用作形參有3個作用:

  1. 不用作引數傳遞(實參賦值給形參),節省開銷,提高效率。
  2. 函式不能改變形參的值
  3. 實參可以是常量