使用引用參數(shù)的原因:
- 程序員能夠修改調(diào)用函數(shù)中的數(shù)據(jù)對(duì)象
- 通過(guò)傳遞引用而不是整個(gè)數(shù)據(jù)對(duì)象,可以提高程序的運(yùn)行速度。
當(dāng)數(shù)據(jù)對(duì)象較大時(shí)(如結(jié)構(gòu)和類(lèi)對(duì)象),第二個(gè)原因最重要,這些也是使用指針參數(shù)的原因。這是有道理的,因?yàn)橐脜?shù)實(shí)際上是基于指針的代碼的另一個(gè)接口。
那么什么時(shí)候使用引用、什么時(shí)候使用指針?什么時(shí)候又應(yīng)該按值傳遞呢?下面是一些指導(dǎo)原則:
對(duì)于使用傳遞值而不做修改的函數(shù):####
- 如果數(shù)據(jù)對(duì)象較小,如內(nèi)置數(shù)據(jù)類(lèi)型或者小型結(jié)構(gòu),則按值傳遞。
- 如果數(shù)據(jù)對(duì)象是數(shù)組,則使用指針,因?yàn)檫@是唯一的選擇,并將指針聲明為指向 const 的指針。
- 如果數(shù)據(jù)對(duì)象是較大的結(jié)構(gòu),則使用 const 指針或 const 引用,以提高運(yùn)行效率。這樣可以節(jié)省復(fù)制結(jié)構(gòu)所需的時(shí)間和空間。
- 如果數(shù)據(jù)對(duì)象是類(lèi)對(duì)象,則使用 const 引用。類(lèi)設(shè)計(jì)的語(yǔ)義常常要求使用引用,這是 C++ 增加引用特性的主要原因。因此,傳遞類(lèi)對(duì)象參數(shù)的標(biāo)準(zhǔn)方式是按引用傳遞。
對(duì)于修改調(diào)用函數(shù)中數(shù)據(jù)的函數(shù):####
- 如果數(shù)據(jù)對(duì)象是內(nèi)置數(shù)據(jù)類(lèi)型,則是用指針。如果看到諸如 fixit(&x) 這樣的代碼(其中 x 是 int 型),則很明顯,該函數(shù)將修改 x。
- 如果數(shù)據(jù)對(duì)象是數(shù)組,則只能使用指針。
- 如果數(shù)據(jù)對(duì)象是結(jié)構(gòu),則使用引用或指針。
- 如果數(shù)據(jù)對(duì)象是類(lèi)對(duì)象,則使用引用。