今晚你選哪道?
void f(int);\\call by value
void f(int*);\\call by address
void f(int&);\\call by reference
main(){
f(123); \\1
f(NULL); \\2
f(0); \\3
}
上面程式碼
call by value 三個都可以通過
call by address 2,3通過
call by reference 接不通過
為什麼呢?
原來是call by address和call by reference當參數傳遞時只能接受"變數"
也就是一個lvalue(memory location),他們必須參考到某一個記憶體位置
而指標比較特殊,他可以接受NULL,也就是0的直當初始化
而call by reference因為一定要初始化的特性,只要是純量他都不接受
void f(int& p){}
main(){
int i=0;
f(i);
}
上面動作就像是
int& p=i;
如果傳純量的話
void f(int& p){}
main(){
f(123);
}
則變成
int& p=100;
根據Reference Type的特性 他當然會編譯不過
切記!切記!
沒有留言:
張貼留言