2011-11-11 49 views
1

我通過已存檔的帖子搜索過,但我找不到任何類似的東西。函數聲明中的const最佳實踐

只是一個簡單的問題:什麼在聲明檢查功能,如最佳做法:

int foo(int a) const { return a+1; } 

林指的是const關鍵字,你在平時的檢查函數的最後聲明呢?我只是問,因爲我通常會這樣做,即使99%我不會聲明任何const類。我只是繼續告訴自己,如果我需要,它可以節省我一些時間,但我想知道其他人是否真的關心聲明const函數,或者如果我只是偏執類型安全代碼

+0

你稱之爲*檢查*函數是什麼? –

+0

啊..只是一種方法來調用一個方法,不會更改任何對象成員 – user815129

+0

該函數不訪問任何成員,所以它應該可能是'靜態'而不是。 – Sven

回答

6

假設你正在談論的成員函數(非成員函數不能const有的話),你應該寫常量,正確的代碼始終,這意味着,每一個功能不修改的可見狀態對象應該是const

即使您沒有創建類型的常量對象,在許多情況下,您將通過const引用將對象傳遞給函數,並且在這種情況下,只能在對象上調用const成員函數(順便提一下這意味着你應該通過不斷地引用任何不需要改變接收對象狀態的函數來傳遞對象)

+0

沒想到,謝謝 – user815129

1

是的,當然你應該如果你想讓你的程序支持const正確性。

一旦開始將實例聲明爲const,const正確性就有一種方法在程序中傳播。由於方案的複雜程度和你的const增加使用,那麼你將:使用const對象時,如果不加他們吧

  • 或你的程序將建立一個沒有(或更少)的錯誤

    • 遇到很多編譯器錯誤一旦你贊成在適當的地方使用const
    • 或者您可能最終會避免const一段時間 - 如果您想要改進設計,那麼(IMO)不是一條好路。

    隨着時間的推移,我們中的很多人已經學會了使用const超過1%的代碼。

  • 1

    附加在函數聲明和定義末尾的const表示函數的調用者與函數不會修改該類的任何成員之間的契約。

    因此,如果你的函數爲這種const-correctness契約提供了保證,你應該把它擴展到你的函數的用戶。

    +0

    謝謝,但這是不是一個關於什麼是const關鍵字的含義和用法的問題,我只是想知道是否有其他人關心聲明const函數 – user815129

    +0

    @ user815129:每個Good C++程序員都會這樣做。 –