参数传递模式
T為一個類名.
1.void f(T x) ?按值傳遞
:調用函數時,產生一個x的副本,函數中修改x副本的值不會修改x的值;
優點:安全,可以防止參數X在函數中不小心被修改
缺點:1.調用f函數時,因為要產生一個副本,所有要調用T類的構造函數。
2.f函數結束時,又要調用T類的析構函數
若T類是一個大型類會非常耗時,降低效率。
3.若有時對象不允許被復制(有時復制對象操作僅限于特權用戶或被禁止【此處可能是把復制對象的函數放在private中聲明】)
?
2.void f(const T x) 按值傳遞
有上面一個的所有優缺點
特別之處:因為x被聲明為const對象所以x的副本在f函數中不能被修改.
?
3.void f(T& x) 按引用傳遞
優點:可以直接對x進行寫入和讀取
缺點:若x在函數中被銷毀,函數外有存有x地址的變量,在調用x時,會導致程序崩潰.
(在多線程環境中,這種方式是十分危險的)
?
4.void f(const T& x) ?按引用傳遞
優點和3例一樣。
特別之處:此方法x只能被讀取,不能被修改.(在傳遞大型對象是,此傳遞方法強烈推薦)
?
5.void f(T* x) 按指針傳遞
在調用函數時,產生一個指向x的指針(4字節大小,幾乎可以忽略不計).
優點:可以直接修改x.
缺點:若在函數中銷毀x,會產生主函數的指針懸掛.
特別注意:若函數中的x改變所指對象,不會改變函數外x所指的內容.
?
指針有空指針(即NULL或0)
所以最好 void f(T* x=0)
提醒即使把空指針傳遞給函數也不會有問題
?
?
6.void f(const T* x)?按指針傳遞
優點只能對x進行讀取.
?
7.void f(T* const x)
可以對x進行讀取和寫入,但是不能移動指針。
?
8.void f(const T*const x)
?
轉載于:https://www.cnblogs.com/zhengzhe/p/6485703.html
總結
- 上一篇: 乌镇春节期间开放吗
- 下一篇: Codeforces Round 367