Call by Reference 和 Call by Address的效果相同 , 只是寫法不同.
int main() {
int x = 5;
foo(x); // 不用加& }
int x = 5;
foo(x); // 不用加& }
void foo(int &x) {
x++; // 修改此x就是修改main的x }
x++; // 修改此x就是修改main的x }
如果寫成call by pointer的方式,麻煩的地方是每次傳address都要加個 & ,而在副程式裡還要加個 * 來指向原本的實體。因此,C++新增了Call by reference的方式,讓在丟變數到副程式時,不用加&,而在副程式參做此變數也不用加*號就可以直接修改其變數。唯一要寫的是:在副程式裡的參數裡加上&,代表是Call by reference。
另外一種寫法
int a = 10, b = 20;
int &x = a;
特別要注意的是,Call by reference的方式,一定要在初始化時就有指向的實體,而且不能改變。int &x = a;
Read more: http://tw.tonytuan.org/2010/03/call-by-valuecall-by-pointercall-