C++函數傳參--永遠的複製+值傳遞

void process(A a){}
當process發生調用時,如
A b;
process(b);
這個時候發生的故事,是b的值(此時是對象值)複製,
將該對象傳給process, 因此process中的改變,對b沒有影響。
----我們喜歡將這個歸結爲值傳遞。

void process(A* a){}
發生調用A b;
process(&b);
這個時候發生的故事,是&b的值(b的地址)賦值,
該地址傳給Process, process中,通過地址,找到對象,並改變原對象。
所以,b發生改變。
----我們喜歡將其歸結爲傳引用。


其實永遠都是傳值,但函數中操作的方式不同,所以才造成對象是否能變化的問題。


打個比方,有人給你寄了包裹,包裹(對象)寄到了郵局(對象地址),然後郵政人員打印了一份取包裹的通知(上面有包裹對象的地址),這個時候,包裹通知總要留一份存根吧!寫通知墊在底下的複印紙,而你就是取包裹的function,收到也僅僅只是通知的複印件,但你根據上面的地址操作打開包裹,操作包裹,當然會對這個包裹產生作用。


假如是第一種情況的調用, 包裹傳遞給function的時候,會被複制一份,操作的不再是原來的東西.


函數傳參只有一種方式:複製一份,並傳值。究竟是操作原來的對象,還是值對象,就看函數怎麼利用傳入過來的值了,如果是通過地址找對象,當然對原來的對象產生了影響,否則,將不影響原來的對象。


所以,寫函數的時候,不要將對象作爲參數,否則,棧的資源消耗會非常嚴重。 當然,除非有必要這樣做。
發佈了23 篇原創文章 · 獲贊 0 · 訪問量 5280
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章