我正在讀一本關於C++的書,並且有一個例子,他們通過引用常量來傳遞函數。const與傳遞引用一起使用的要點是什麼? C++
int square(const int& n)
...
我看不到這一點?如果您不打算對變量進行任何更改,爲什麼不通過值正常傳遞?不是通過引用傳遞的整個點,所以您可以更改變量的值。
我正在讀一本關於C++的書,並且有一個例子,他們通過引用常量來傳遞函數。const與傳遞引用一起使用的要點是什麼? C++
int square(const int& n)
...
我看不到這一點?如果您不打算對變量進行任何更改,爲什麼不通過值正常傳遞?不是通過引用傳遞的整個點,所以您可以更改變量的值。
對於複雜類型,傳遞值比通過引用傳遞要昂貴得多,因爲必須將值的副本傳遞給函數。考慮將一個大向量傳遞給計算中值的函數。你真的想分配一個新的矢量,複製所有的值,在新的矢量上執行平均,然後釋放你分配的內存?按引用傳遞會保存分配/複製/空閒循環。對於int
,沒關係。事實上,在大多數通過價值傳遞的平臺上會更便宜。
這很有道理。我習慣於通過引用自動傳遞對象的Java。所以如果我有一個向量,並且我將它通過值傳遞給一個函數,並且函數對它做了一些更改,那麼除非通過引用傳遞,否則這些更改不會反映在原始向量中。 – chasep255
@chase在Java中,參數總是按值傳遞。 –
這可能對int沒有實際影響。但是對於更大的數據類型,傳遞const引用就是性能優化。所以很多編程人員只是使用const引用而不是習慣中的值。
如果你通過引用傳遞它,你只傳遞指針,這是一個「小」的東西通過。此外,該對象不會複製到您的功能中,因此您總共使用的內存較少。
按值傳遞會產生副本,而不是與int有關。 – chris
複製一個對象可能很昂貴(例如,想象一個大的矢量)。按引用傳遞(const或不)會節省製作副本的成本。 – john
'const'引用用於避免不必要的對象複製。 但是,我認爲,對於原始數據類型而言,它無助於任何類型的性能。 – P0W