2012-03-09 45 views
0

const &作爲參數傳遞給函數會有什麼問題嗎?傳遞const&作爲函數參數

最近我們已經重寫對象通過由值的所有出現通過參考&或通過const &通過適用時。

沒有編譯器錯誤。

該應用程序是一個Windows服務,它無法啓動。我們沒有調試版本,所以我在這裏問。

+2

這取決於。我建議你創建一個調試版本,並調試問題。 – 2012-03-09 18:20:24

+0

如果你以前按價值通過了所有的東西。而你只是將它們改爲引用,那麼它們應該全部改爲'const&',否則你將改變代碼的功能。如果有任何方法正在修改參數,則需要使本地副本不會修改原始參數(否則您正在更改代碼的含義)。 – 2012-03-09 18:21:51

+0

你爲什麼做這個改變?如果你有'void func(int param)',你可以把它改成'void func(const int&param)',但是它會給你帶來什麼? – 2012-03-09 19:46:25

回答

0

因此,您的應用程序行爲可能發生變化的一種方式是:如果您盲目傳遞以前通過值傳遞的內容&,請修改其狀態,舊代碼不會期望狀態發生變化並假定該對象傳遞給函數的函數仍處於傳遞之前的狀態。

通過&是什麼會導致麻煩,而不是const&。除非... grep代碼庫const_cast

+0

你不需要'const_cast'。考慮一個包含指針成員的類。使對象'const'不能保護被指向的東西。 – 2012-03-09 18:25:15

+0

@OliCharlesworth如果這些指針是「const」正確的,那該怎麼辦? – pmr 2012-03-09 18:29:16

+0

使類實例'const'有效地使所有成員爲'const',所以'int * my_ptr'形式的類成員有效地變爲'int * const my_ptr'。但是這與'const int * my_ptr'截然不同。 – 2012-03-09 18:39:37