2011-06-17 83 views

回答

5

如果程序員(或編程團隊)能夠成功跟蹤每個變量的每個細節,而不是意外地將一個值賦給常量,那麼通過所有方法不要聲明常量const

在該語言中增加const對於防止容易預防的錯誤非常有用,這與恐龍時代會發生惡劣事件的語言不同。

下面是我曾經在一個巨大的FORTRAN 77應用程序中追蹤的錯誤的近似值。 FORTRAN 77通過引用傳遞參數,除非採取特殊措施:

subroutine increment(i) 
integer i 

i = i + 1 
end 

subroutine process() 
call increment (1) 
call someprocedure (1, 2, 3) 
... 

結果是someprocedure()被稱爲與(2,2,3)!

+0

哎...修改字面值? WTF?我總是希望在那些能夠真正瞭解你所編程的機器的每一個細節的時候學會了編程,但該死的......這太討厭了。 –

1

因爲程序員不知道是否要更改變量?

不會。您會爲其他程序員寫很多代碼。他們可能想要改變這個價值。

也許,你犯了一個錯誤,你無意中改變了值。如果它是常量,它不會讓你。 Const對於重載操作符也非常有用。

0

const幫助編譯器優化代碼。臨時工必然會受到限制。因此,使用const可以增加臨時對象的使用壽命。

+0

'const'幾乎不提供對優化器的實際支持。然而,關於臨時性的一點是真實的。 –

0

在網絡編程中,可以通過注入來改變變量(有時候是惡意的)。

當你不小心改變變量但知道不需要的時候,它也有幫助。

4

但是,聲明所有內容不是更安全,因爲程序員不知道是否要更改變量?

這是完全錯誤的。確保應該是一個不變價值的東西不會被錯誤地改變。它向所有可能在未來遇到它的程序員傳達價值的意圖。如果一個程序假設一個值永遠不會改變,那麼爲什麼要允許它呢?這可能會導致很難追蹤錯誤。

不要假設你的程序是正確的,儘可能使用你的語言提供的實用程序。大多數現實世界的項目不是由坐在地下室的一個人完成的。它們涉及多個程序員,並且會維護多年,通常由一羣與初始版本無關的人員來維護。

請不要讓我或任何其他人猜測您的設計決定是什麼,只要可能就讓它們明確。地獄,甚至當你回到一段時間沒有碰過的節目時,你會忘記你的想法。

0

常量在編寫大型程序時非常有用,您可能會迷失方向,忘記變量(或常量)的作用或是否允許您更改其值。

此外更重要的是,這對於團隊合作和爲其他人編寫圖書館很重要。如果您爲其他人編寫代碼,他們可能會更改您希望保留常量的變量,因此將其聲明爲常量非常有用。

當你想在只允許使用常量的地方使用相同的數字時,它也很有用,例如,爲靜態數組賦值。在這種情況下,你不能通過變量來確定數組的大小,而且每次你​​想改變數組的大小時都會檢查所有的代碼和改變數字,這非常煩人,所以把這個數字聲明爲一個常量是非常有用的,我真的有一個經驗。

希望這是令人信服的,這就是我現在記得的,我會回來編輯,如果我還記得其他的東西。

有一個很好的編程:)

1

是的,你是對的,當你說的基本思路是,以確保恆定的變量防止編程錯誤。但是另外一個用途是,你提供給你的客戶端的接口也確保你想成爲const的任何東西都保持不變!它可以防止使用你的代碼的人違反約束條件。

這將派上用場,特別是在面向對象。通過確保你的對象是const,你可以寫很多代碼而不用擔心後果。這些對象可以被新的程序員或客戶使用,他們必須保留這個屬性。 Const迭代器也非常方便。

This link should help you out