C++中的引用,給我們提供了一種差別于C指針的形參定義方式。一般我們可以将其定義為
1)普通引用
void foo(int &n);
2)常量
void foo(const int n);
3)常量引用
void foo(const int& n);
三種方法用途不一樣,都可以通過編譯。
以普通引用為形參的函數,一般會更改實參的值,比如increment(int &n)等;以常量以及常量引用為形參的函數,一般不對實參進行修改。需要注意的是,當函數的功能确定後,不能把常量引用和普通引用混淆,雖然編譯可以通過,運作也沒有錯誤,但是會對函數的安全性以及功能造成影響:
1)如果一個本該是常量引用的形參定義成了普通引用,那麼程式員會誤認為這個形參可以修改。而且,在調用該函數的時候,會産生意想不到的錯誤。比如:
int getSize1(string &str){
return str.size();
}
int getSize2(const string &str){
return str.size();
}
void main(){
getSize1("helloworld");//報錯
getSize2("helloworld");//正确
}
顯然,getSize2才是符合正常函數思維的實作。
2)常量引用為形參時,形參指向實參的空間,而常量為形參時,編譯器會給形參重新配置設定空間。
void foo1(const int n){
printf("%x\n", &n);
}
void foo2(const int &n){
printf("%x\n", &n);
}
int main(int argc, char *argv[]){
int n = 1;
printf("%x\n", &n);
foo1(n);
foo2(n);
return 0;
}
//輸出:
//e25f58cc
//e25f58ac
//e25f58cc