《Effective C++》重點摘要(四)

來源:互聯網
上載者:User

標籤:effective   c++   讀書筆記   

《Effective C++》第四章:設計與聲明
  1. 讓介面容易被正確使用,不易被誤用。一個介面由傳回型別、介面名稱、和參數列表組成,為了讓介面容易被正確的使用,需要小心設計傳回型別,最好是簡單、直接、自然。介面名稱選擇很重要,做到簡單、達意、無歧義。參數列表形參類型需要身份小心,如果能防範非法輸入,儘力為之,形參名也儘可能做到同介面名稱一樣的標準。另外請保持命名習慣的一致性也能收到奇效。
  2. 設計class猶如設計type。使用者對語言內建的type支援的行為一般十分熟悉,所以最好自行設計的class能夠像內建type一樣,讓使用者使用起來得心應手。為了做到這個,可以問自己下面這些問題:
    1) 新type對象如何被建立和銷毀?
    2) 對象的初始化和對象的賦值該有什麼差別?
    3) 新type的對象如果被pass-by-value,意味著什嗎?
    4) 什麼是新type的“合法值”?
    5) 新type需要配合某個繼承圖系嗎?
    6) 新type需要什麼樣的轉換?
    7) 什麼樣的操作符和函數對此新type而言是合理的?
    8) 什麼樣的標準函數應該駁回?需要拒絕的或是該聲明為private的?
    9) 新type的成員存取權限是否合理?
    10) 什麼是新type的為聲明介面?它對效率、異常安全、資源利用提供何種保證?
    11) 新type有多麼一般化?需要template嗎?
    12) 這個新type真的是需要的嗎?
  3. 寧以pass-by-reference-to-const替換pass-by-value。以const引用作為引用的第一理由是安全,不會發生對象切割,第二理由是高效。但是語言內建的簡單類型還是以值傳遞比較高效。
  4. 必須返回對象時,別妄想返回其reference。為了效率返回引用……額,別想了,函數內部的局部變數在函數結束時會被析構的,引用怎麼可以指向一個返回指標嗎?可以是可以,但是誰保證釋放這個指標指向的記憶體,並且這種方法也不一定總是有效。也許你可以利用RAII,返回一個智能指標。但是,最好還是返回對象吧。
  5. 將成員變數聲明為private。封裝得越多,實現者可以在幕後做更多手腳而不影響用戶端代碼;為封裝的成員變數提供訪問的函數介面,給使用者更一致的使用風格;protected並不比public更具有封裝性,因為它在子類中就像public一樣。C++中只有兩種存取權限:封裝的(private)和不封裝的。
  6. 寧以non-member且non-friend替換member函數。這一個條款真的不適合幾句話說清楚,這裡我想說的是如果發現某個成員函數只是調用一序列public類型的函數來完成功能,那麼就把它編寫為一個non-member且non-friend函數。這樣可以帶來更大的封裝性、包裹彈性和機能擴充性,降低編譯依賴性。具體原因非常精彩,將以另一篇博文呈現。
  7. 若所有參數皆需要類型轉換,請為此採用non-member函數。比如為複數類重載一個乘法運算子(*),如果作為一個member函數,那麼第一參數this將不能輕鬆實現轉型,所以為了便利,將其實現為一個non-member函數會讓日子過得更輕鬆一點。
  8. 考慮寫出一個不拋異常的swap函數。應該實現一個member版的swap函數,然後再實現一個non-member版的swap函數,讓non-member版調用member版swap函數,一般情況下,這樣做是為了copy-and-swap技術,從而做到異常安全,於是,不應該讓swap函數拋出異常。

《Effective C++》重點摘要(四)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.