大多數都
不太確定它跟call by address的差別與使用時機。我想藉由這篇文章分享我個人的看法。
我個人的習慣是能用call by reference就用call by reference,因為我覺得如此可以減少出錯(或者是client誤用的機率),也可以減少一些麻煩。例如List 1中因為傳進來的是pointer,所以保險起見(其實是一定要的)要先檢查它是不是nil (line 4)甚至加個assert (line 3)好讓我們在開發的時候及早發現不正常的狀況,有一點麻煩。
List 1 - Call by address
void aSimpleFunctionWhichTakesOneParameter(string *param1) { assert(param1 != nil); // solid programming if (param1 != nil) { // sanity check as always //do something to param1 } }但是如果改成用call by reference如List 2,那就不用管它是不是nil了。
List 2 - Call by reference
void aSimpleFunctionWhichTakesOneParameter(string ¶m1) { //do something to param1 }但是有人就會問"那什麼時候用call by address?",我的看法是當該參數是optional的時候(例如List 3)就該用call by address,因為如此一來client才能傳nil進來。
List 3 - Optional parameter
// a stupid function which gets lots of stuff at the same time void getEverything(int *x, int y, int *width, int *height) { if (x != nil) *x = 10; if (y != nil) *y = 100; if (width != nil) * width = 1000; if (height != nil) * height = 10000; }以上觀點供大家參考。
恩恩~ 看來我誤會 call by reference 和 call by address 好久了, 以前一直認為這兩樣東西是差不多的東西. @@
回覆刪除我一直都只會分call by value跟 call by reference T^T。檢查nil是好習慣,我要學起來!!!XD
回覆刪除不過 Objective-C "大部份"的時機不用檢查
回覆刪除是因為Obj-C init的習慣嗎? for EX: initWithString
回覆刪除Messaging nil
回覆刪除推推 reference=分身
回覆刪除我c++好弱~教教~
回覆刪除