C 程式設計規範之函式與操作符

2021-04-08 21:02:51 字數 1384 閱讀 6004

函式與操作符

第25條:正確地選擇通過值、(智慧型)指標或者引用傳遞引數

摘要:正確的選擇引數:尤其要分清引數傳遞的性質。

對於輸入引數,可以盡量使用const型別,變數可以使用const變數,因為變數複製的代價是極小的;至於物件可以使用const指標或者引用的方式進行傳遞。這樣可以減少複製帶來的代價。

對於輸出引數,如果引數的可選的,可以使用指標來進行傳遞,而用null表示引數忽略,慚愧的很,這點我做的不好。而如果是必選引數,引用是個很好的選擇。

第26條:保持過載操作符的自然語義

摘要:如果可以選擇的話,不要過載操作符;如果別無選擇的話,需要保持操作符的自然語義。

我可以不願意我在寫a+b的時候變成了a/b,事實上除了當事人寫的時候知道為什麼要過載,其他時候其他人可能都是以原始語義來揣度操作符的語義,不要指望所有人來看操作符的注釋或者實現,這樣的期望都是極不現實的。最好的辦法就是維持最初的公約。

第27條:優先使用算術操作符和賦值操作符的標準形式

摘要:如果定義a+b,最好同時定義a+=b

對於操作符過載來說,只過載算術操作符或者賦值操作符是不全面的,這一對應該成對出現,也應該一起來實現。在實現的過程中,先實現哪乙個並無定論,但一般都是先實現其中乙個,再用此過載操作符實現另外的過載。當然如何選擇需要根據實際情況而定。

第28條:優先使用++和--的標準形式。優先呼叫字首形式

摘要:如果定義++c,也要定義c++。如果呼叫的話,優先呼叫++c。

原因再簡單不過,節省了乙個物件的生成的代價。

第29條:考慮過載以避免隱含型別轉換

摘要:大道至簡

用過載避免隱含型別轉換是個建議,當然事實上這裡用到是考慮。考慮就是不著急,預設的隱式轉換,我認為危險性其實並不大。用過載來代替能提高效率,但這並非是很急迫的。但是如果自行定義隱式轉換的話,最好還是想清楚為好。

第30條:避免過載&&、|| 或者,

摘要:操作符中也有後媽生的。不要輕易招惹這些傢伙,他們收到了特殊的優待,而這並不是通常可以得到的。

沒有什麼好說的。它們收到了特殊的優待,如果過載,優待就沒有了。這常常導致既得利益者的不滿。

if(e&&e->do())

如果e == null函式就返回了,如果你過載這個函式,就要先對e->do()求值。不要抱怨了,有時候現實就是這樣。

第31條:不要編寫依賴於函式引數求值順序的**

摘要:保值求值的順序。

從來不要揣度編譯器的實現。不同的編譯器差別還是蠻大的,所以盡量不要挑戰編譯器的實現,例如,揣度編譯順序。

tran**ogrify(++count,++count);

告訴我,先加左邊的還是右邊的,沒有人知道,寫這樣**的人也很可怕,因為可能在兩個編譯器下,就可能有兩種結果,這和不要在靜態全域性物件初始化的時候有什麼依賴是乙個道理。靠自己來控制,而不要指望編譯器。

C 程式設計規範之函式與操作符(讀書筆記)

第25條 正確地選擇通過值 智慧型 指標或者引用傳遞引數 摘要 正確選擇引數,分清輸入引數 輸出引數和輸入 輸出引數,分清值引數和引用引數。正確的傳遞引數。選擇引數的準則 對只輸入引數 始終用const限制所有指向只輸入引數的指標和引用 優先通過值來取得原始型別和複製開銷比較低的值物件的輸入。優先按...

程式設計思想之操作符

1.賦值操作符 assignment operator 賦值使用操作符 它的意思是 取右邊額值,把它複製給左邊 右邊可以是任何常數 變數或者表示式,但左邊必須是乙個明確的 已命名的變數。不能把任何東西賦給乙個常數,常數不能作為左值 比如不能說4 a 基本型別儲存了實際的數值,而並非指向乙個物件的引用...

C 函式過載操作符

c 可以對操作符 operator 進行過載,一般定義在類的成員函式中,以下面的 為例.class point 定義乙個類模板 建構函式 point 析構函式 過載算術操作符 類似 point operator const point other 過載關係操作符 類似 bool operator c...