當我遇到函數來計算立方體的體積時,我正在閱讀我的C++書籍(Deitel)。代碼如下:傳遞值時不是「const」冗餘嗎?
double cube (const double side){
return side * side * side;
}
使用「常量」限定詞的解釋是這樣的:「在const修飾應該被用來執行最小特權原則,告訴該函數不修改編譯器可變的一面「。
我的問題:是不是在這裏使用「const」冗餘/不必要,因爲變量是通過值傳遞的,所以函數無法修改它?
當我遇到函數來計算立方體的體積時,我正在閱讀我的C++書籍(Deitel)。代碼如下:傳遞值時不是「const」冗餘嗎?
double cube (const double side){
return side * side * side;
}
使用「常量」限定詞的解釋是這樣的:「在const修飾應該被用來執行最小特權原則,告訴該函數不修改編譯器可變的一面「。
我的問題:是不是在這裏使用「const」冗餘/不必要,因爲變量是通過值傳遞的,所以函數無法修改它?
const
限定符可防止函數內的代碼修改參數本身。當一個函數大於平凡的大小時,這樣的保證可以幫助你快速閱讀和理解一個函數。如果您知道side
的價值不會改變,那麼隨着時間的推移,您不必擔心隨着時間的推移跟蹤其價值。在某些情況下,這甚至可以幫助編譯器生成更好的代碼。
一個不重要的人會這樣做,理所當然,因爲它總體上是很好的風格。
有道理。謝謝。 – 2012-01-03 15:10:16
爲什麼「也」?這是*所有*它。 – 2012-01-03 18:12:44
@KeithThompson - 事實上,就是這樣,但O.P.正在考慮const ref參數,其中'const'使您不會更改原始對象。 – 2012-01-03 18:49:54
你可以做這樣的事情:
int f(int x)
{
x = 3; //with "const int x" it would be forbidden
// now x doesn't have initial value
// which can be misleading in big functions
}
+1說明:) – 2012-01-03 15:17:21
const'這裏的'的意思是,你不能修改''裏面立方體()'方法side'參數,以避免意外行爲。 – 2012-01-03 15:09:10
有時候事情更多的是關於「良好實踐」而非必要性。我認爲這是其中的一次。 – destan 2012-01-03 15:11:21
我認爲這些答案在解釋你爲什麼這樣做的過程中做了很好的工作,但我只是將它添加到外部調用者中,'const' *是*冗餘的,不是函數簽名的一部分。這意味着你可以在函數聲明中不做任何改變。如果出於某種原因想要使代碼更易維護,並且不會影響調用代碼,也可以稍後將其刪除。 – 2012-01-03 16:37:57