C++中,函數的參數傳遞方式有值傳遞、地址傳遞。傳地址有指針和引用方式。
在函數參數中,傳地址的理由有:
1.使被調函數可以修改主調函數中的數據對象;
2.傳地址可以減少數據拷貝,提高程序執行速度。
那麼,何時使用值傳遞,何時使用地址傳遞(指針和引用)?
下面是一些寫代碼時會遇到的一些情況
被調函數使用參數對象時,不會修改數據對象
- 如果要傳入函數的數據對象較小,比如是內建數據類型或小規模的結構體,那麼使用值傳遞;
- 如果數據對象是數組,那麼使用指針(這也是你唯一的選擇)。指針添加const修飾;
- 如果數據對象是大規模的結構體,使用const指針或const引用;
- 如果數據對象是class對象,使用const引用。這也是C++中傳遞class對象的標準做法;
被調函數使用參數對象時,會修改數據對象
- 數據對象是內建數據類型,使用指針(func(&var)表明函數中要修改var,比使用引用的調用形式func(var)可讀性好);
- 數據對象是數組,指針是唯一的選擇;
- 數據對象是結構體,使用指針或引用;
- 數據對象是class對象,使用引用;
當然,以上只是一般情況。特殊情況另外討論。