C++中一般引用作形參和常引用作形參的問題
阿新 • • 發佈:2018-11-08
#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;}也會報錯:
結論:
如果不需改變形參的值又不用作引數傳遞(實參賦值給形參),用常引用作形參適應面最廣:實參可以是變數也可以是常量。
如果需要改變形參的值,用引用作形參最合適:實參必須是變數不允許是常量。
如果不需改變形參的值又可以用作引數傳遞(實參賦值給形參),用普通變數作形參:多了傳遞引數的開銷。
對比一般引用作形參和常引用作形參
一般引用作形參:
- 不用作引數傳遞(實參賦值給形參),節省開銷,提高效率。
- 函式可以改變形參的值
- 實參不能是常量
常引用作形參有3個作用:
- 不用作引數傳遞(實參賦值給形參),節省開銷,提高效率。
- 函式不能改變形參的值
- 實參可以是常量