effective C++ 讀書筆記(一)

來源:互聯網
上載者:User

第一章 讓自己習慣C++

條款01:視C++為一個語言聯邦

條款02:盡量以const, enum, inline替換#define

n        對於單純常量,最好以const對象或enums替換#define

n        對於形似函數的宏,最好改用inline函數替換#define

第一,用define時,記號名稱由前置處理器處理,沒被編譯器看見,記號名稱不進入symbol table內,出現編譯錯誤時,可能帶來困惑。

第二,define不重視範圍,不能用define建立一個class專屬常量。不能提供任何封裝性

第三,define函數時,也會帶來麻煩,如f(++a),可能會多次執行++a

條款03:儘可能使用const

n        const可被施加於任何範圍內的對象、函數參數、函數傳回型別、成員函數本體

n        當const和non-const成員函數有著實質等價的實現時,令non-const版本調用const版本可避免代碼重複。

如果關鍵字const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指標自身是常量;

聲明為const指標,表明指標不得指向不同的東西,但它所指的東西的值可以改動。

const成員函數:可以確認該成員函數可作用於const對象。也表明該函數不能更改對象的任何成員變數(static除外)。

可以用mutable修飾變數,來釋放掉non-static成員變數的bitwise constness約束(const函數中可以修改mutable變數)

轉型const_case: 將const變數轉為非const。static_cast: 顯示的轉型。

條款04:確定對象被使用前已被初始化

n        為內建型對象進行手工初始化

n        建構函式最好使用成員初值列,而不要在建構函式本體內使用賦值操作(效率高)

確定每一個建構函式都將對象的每一個成員初始化

不要混淆了賦值和初始化。

在C++規定,對象的成員變數的初始化動作發生在進入建構函式本體之前。用member initialization list(成員初值列)。

C++的成員初始化次序:base classes早於其derived classes。而class的成員變數總是以其聲明次序被初始化。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.