函數原型:C++函數中「傳遞引用」和「傳遞指針/地址」有什麼區別?
1. int test (int & i);
2. int test (int * i);
函數調用:
1. test(n);
2. test(&n);
任何人都可以解釋在許多方面儘可能的區別? 非常感謝!
函數原型:C++函數中「傳遞引用」和「傳遞指針/地址」有什麼區別?
1. int test (int & i);
2. int test (int * i);
函數調用:
1. test(n);
2. test(&n);
任何人都可以解釋在許多方面儘可能的區別? 非常感謝!
參考不能是NULL
而指針可以。這基本上是唯一的區別。一般來說,這是一個實現細節,因此從理論上講,按引用傳遞並且按指針傳遞可能與「底層」不同,然而,它們幾乎總是以相同的方式實現。
主要區別在於引用不可能爲null(在格式良好的程序中),所以不需要測試null。除此之外,引用通常是在指針的內部實現的,因此行爲將類似。
除此之外,還有風格部分問題。在這種情況下,不同的風格會更喜歡一種或另一種風格。我一直在那些喜歡這兩種風格的公司,第一個是因爲它在C++中是習慣用法,第二個是因爲它似乎使它更加明確(至少對於某些程序員來說),如果參數被傳遞,函數將會改變參數指針。我個人的感覺是,這更像C程序員的慣例,但它仍然存在。
幾天前我注意到了另一個區別 - 雖然它隻影響回報:http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ - 非常有趣和令人驚訝。 –