《C++代碼整潔之道》-正確地使用const

正確地使用const

const 正確性對於實現更好、更安全的C++代碼來說是一種很實用的方法。實用const可以省去很多麻煩且節省調試時間,因爲違反const會直接導致編譯時錯誤。還有,const的使用也可以支持編譯器的一些優化算法,這意味着正確使用該限定符,也是一種提高程序執行性能的有效方法。
不幸的是,許多開發人員低估了使用const的好處,我的建議是這樣的:NOTE:const的正確性。儘可能地使用const,並始終爲變量或對象選擇適當的聲明以區分可變和不變。
通常,C++中的關鍵字const可以防止程序對該對象的變更。但該關鍵字有很多用法,const可能被用在不同的環境中表達不同的意思。
最簡單的用法是將變量定義爲常量:
const long double PI = 3.141592653589794;
另一個用途是防止傳遞給函數的參數被改變。 由於存在多種可變的情況,因此通常會導致混淆,下面是一些例子:

unsigned int determineWeightOfCar(Car const* car); //1
void lacquerCar(Car * const car); //2
unsigned int determineWeightOfCar(Car const* const car); //3
void printMessage(const std::string& message); //4
void printMessage(std::string const& message); //5

1.指針car指向Car類型的常量對象,即Car對象(“指針指向的對象”)不能被修改。
2.指針car是一個Car類型的指針常量,即你可以修改Car對象,但不能修改指針(例如,爲其指定Car的新實例)。
3.在這種情況下,指針和指針指向的對象(Car對象)都無法被修改。
4.參數message通過const引用傳遞給函數,即不允許在函數內部更改被引用的字符串變量。
5.這只是const引用參數的另一種表示,它等同於第4行
提示

有一個簡單的經驗法則可以正確解讀const限定符所修飾的對象。如果你在聲明式中從右向左閱讀,那麼任何出現的const限定符都會修飾它左邊的內容。例外情況:如何左側沒有任何內容,例如,在聲明的開頭使用了const,則const修飾的就是它右側的內容。

const關鍵字的另一個用途是將類的(非靜態)成員函數聲明爲const。

#include <string>
class Car{
public:
	std::string getRegistrationCode() const;
	void setRegistrationCode(const std::string& registrationCode);
	//...
private:
	std::string _registrationCode;
};

getRegistrationCode不能修改類Car的成員變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章