使用const 提高函式的健壯性

2021-06-05 22:11:48 字數 1266 閱讀 9096

1,用const修飾函式的引數

1.1如果此引數是作輸出用,則不論它是什麼資料型別,也不論它採用「指標傳遞」或「引用傳遞」,都不能加const修飾,否則該將失去輸出功能。

如果此引數是作輸入用,則用const 修飾可以防止意外地改動該指標,採用規則(常量指標,或指標常量而定),如果直接採用值傳遞的話

則不需要加const,因為函式體中自動產生臨時變數來複製該引數,因此該引數並不需要保護

1.2採用自定義資料型別時,如果用函式宣告為type func(a a) 這樣,則函式的效率是比較底的,因為函式體中要產生

臨時用於複製物件a,則需要進行物件的構造,複製,和析構等過程,要消耗一定的時間。可採用type func(const a &a)來以免產生臨時物件。

2,用const修飾函式的返回值

2.1 

如果給以「指標傳遞」方式的函式返回值加const修飾,那麼函式返回值的內容不能被修改,該返回值只能被賦給加const修飾的同型別指標。

2.2如果函式返回值採用「值傳遞方式」,由於函式會把返回值複製到外部臨時的儲存

單元中,加const 修飾沒有任何價值

3函式返回值採用「引用傳遞」的場合並不多,這種方式一般只出現在類的賦值函式

中,目的是為了實現鏈式表達。

例如class a

;a a, b, c; // a, b, c 為a 的物件

⋯a = b = c; // 正常的鏈式賦值

高質量c++/c 程式設計指南,v 1.0

2001 page 84 of 101

(a = b) = c; // 不正常的鏈式賦值,但合法

如果將賦值函式的返回值加const 修飾,那麼該返回值的內容不允許被改動。上例

中,語句 a = b = c 仍然正確,但是語句 (a = b) = c 則是非法的。

4 const 成員函式

任何不會修改資料成員的函式都應該宣告為const 型別。如果在編寫const 成員函

數時,不慎修改了資料成員,或者呼叫了其它非const 成員函式,編譯器將指出錯誤,

這無疑會提高程式的健壯性。

以下程式中,類stack 的成員函式getcount 僅用於計數,從邏輯上講getcount 應

當為const 函式。編譯器將指出getcount 函式中的錯誤。

class stack

;int stack::getcount(void) const

const 成員函式的宣告看起來怪怪的:const 關鍵字只能放在函式宣告的尾部,大

概是因為其它地方都已經被占用了

使用const提高函式的健壯性

const不僅是用來定義const常量 更大的作用是修飾函式的引數 返回值 函式的定義體 const是constant的縮寫,恆定不變的意思。被const修飾的東西都受到強制保護,可以預防意外的變動,提高程式的健壯性。so use const whenever you need.用const修飾函式...

C 使用const提高函式的健壯性

前端時間剛開始學mfc 老師沒講語法,對c 中const不是很了解,找了一篇文章看了一下。看到const關鍵字,c 程式設計師首先想到的可能是const常量。const更大的魅力是它可以修飾函式的引數 返回值,甚至函式的定義體。const是constant的縮寫,恆定不變 的意思。被const修飾的...

如何提高jms程式的健壯性

jms api 提供了一下的方式來建立乙個健壯的 jms 應用程式 控制訊息的確認方式 acknowledgment 配置訊息的永續性 確保當 jms 提供者失敗時,訊息不會丟失 設定訊息的優先順序 影響訊息傳遞的順序 允許訊息過期 設定訊息的過期時間,這樣訊息過期後 jms provider 就會...