C++引數傳遞
1.按值傳遞
import std;
void fun(int number) {number ++;}
int main(){
int a = 1;
fun(a);
cout << n << endl;
}
輸出:1
這種情況下,函式呼叫時是copy了a的值在記憶體中存了一個副本,呼叫結束會把副本釋放掉。所以不會改變a的值。
缺點:無法改變實參的值,並且會花銷額外的記憶體。
2.透過引用(&)傳遞
使用這種方法,我們可以對實參進行操作,而且不會浪費記憶體。
我們不是建立一個虛擬引數並傳遞它的值,而是傳遞變數的別名。
import std;
void fun(int &number){number++;}
int main(){
int a = 1;
fun(a);
cout << n << endl;
}
OUTPUT:2
在呼叫函式時相當於
int main(){
int a = 1;
{
int& number = a;
number++;
}
cout << n << endl;
}
3.使用常量引用(const &)傳遞值
為什麼要這樣做呢?
通常使用const引數的原因是我們不想要改變傳入引數的值,使用&傳遞是為了改變傳入引數的值。這不是衝突了嗎?
原來是我們不想浪費任何記憶體並且不想更改變數名的值。
void fun(const int &number) { number++; }
int main() {
int a = 30;
fun(a);
cout << a << endl;
}
output:error:assignment of read-only reference 'number'
出現error了,因為在函式中我們對一個cosnt int
做了自增改變。
如果函式功能只是列印number值就沒問題。
補充:上述函式 fun
可以在 cast 的幫助下改變它的值。