青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 9,  comments - 9,  trackbacks - 0

Effective C++ study note

From c to c plus plus

1. const inline | #define
    a. 符號列表
    b. 類成員const static
    c. define 的缺陷
    d. ifdef控制編譯過程的作用

2. iostream | studio.h   
    a. 辯證看待兩者:
       isotream 缺陷:效率,標準化移植性,構造函數對靜態對象初始化順序
       stdio.h缺陷:類型安全,擴展性
    b. iostream & iostream.h

3. new delete | malloc free
    a. constructor destructor
    b. match

4. use c++ comment style
    a. c++ style用于行注釋以及嵌套注釋相當有優勢
    b. 老的編譯器對預處理的時候不認識c++style注釋

Memory management

5. match new delete
    a. new delete [] 如果不匹配意味著什么,這個是如何實現的?
    b. 杜絕數組的typedef

6. call delete in destructor
    a. 所有的指針成員都必須釋放

7. 準備好內存不足的情況
    a. set_new_handler

8. operator new & operator delete 常規
    a. 如何重載類的new delete,需要考慮什么樣的情況

9. 避免隱藏標準形式的new
    a. 如何全面支持標準new地操作,必須保持一致的調用方式。
    b. 注意new, delete調用時候是如何傳參數的

10. 同時提供new,delete
    a. 需要傳遞這個大小的值嗎?如何傳遞?尤其是繼承的時候

Constructor destructor operator=
11. 適時提供拷貝構造以及賦值操作
    a. 深拷貝,淺拷貝,逐位拷貝,成員拷貝
    b. 類里有指針成員時候提供自己版本拷貝構造,賦值操作,選擇(禁用,內存拷貝,引用計數)

12. 初始化列表與構造函數
    a. 必須置于初始化列表的情況
    b. 兩者的含義。(構造函數初始化,以及賦值操作)
    c. 效率

13. 初始化列表中成員順序和它們在類中申明的順序
    a. 類成員是按照它們在類里被聲明的順序初始化的,如果多繼承,按照基類生命順序初始化。與初始化列表無關。

14. 基類有虛析構函數
    a. 為什么行為無法預知?
    b. 如何使用內聯函數包裝虛析構函數?

15. 讓operator=返回*this地引用
    a. 為什么必須返回左值?
    b. 臨時對象的const屬性

16. 在operator=中對所有數據成員賦值
    a. 這里的所有成員包括:己類的成員, 所有基類成員。
    b. 如何處理基類的成員?
    c. 多繼承下拷貝構造函數也有這樣的問題。

17. 在operator=中檢查給自己賦值的情況
    a. 檢查的重要性:提高效率,保證正確性
    b. 如何檢查 (值判斷,地址判斷,對象標識)
    c. 擴展,只要別名有可能出現的函數都需要注意這個問題

類與函數
18. 爭取類的接口完整并且最小
   
19. 分清楚成員函數,非成員函數和友元函數
    a. 成員函數與非成員函數比較:雖然兩者可以對所有參數隱式轉換的。但是成員函數的this參數是不放在可轉換列表里面的。
    b. 友元函數雖然也是屬于非成員函數,但是它的不同就是能夠訪問私有變量。
    c. 設計一個函數的時候考慮順序:成員函數->非成員函數->友元函數:只有非成員函數對最左面的參數進行類型轉換,如果f需要對最左面的參數轉換,讓f成為非成員函數。如果f還需要訪問類的非公有成員,讓f成為類的友元函數。其他情況下都申明為成員函數。

20. 避免public接口出現數據成員
    a. 基于幾方面的考慮(一致性,功能分離)

21. 盡可能使用const
    a. 星號作為分隔符
    b. bitwise constness & conceptual constness
    c. mutable or const_cast

22. 盡量用傳引用而不是傳值
    a. slicing-problem while pass value

23. 必須返回一個對象時不要試圖返回一個引用
    a. for example: operator *

24. 在函數重載和設定參數缺省值間慎重選擇
   
25. 避免對指針和數字類型重載

26. 潛在的二義性
    a. 二義性來源:方法二義性,函數重載參數二義性,繼承帶來的二義性
    b. C++語言的標準轉換??
    c. 對類成員的引用所產生的二義性不考慮訪問權限-〉改變一個類成員的訪問權限不應該改變程序的含義

27. 如果不想使用隱式生成的函數就要顯式地禁止它
    a. private申明它但是不去實現,這樣鏈接器會幫你檢查錯誤

28. 劃分全局名字空間

類和函數:實現

29. 避免返回內部數據的句柄
    a. 指針,引用的返回。注意const版本

30. 避免這樣的成員函數:返回值是指向成員非const指針或引用,但成員的訪問級比這個函數要低

31. 不要返回局部對象的引用

32. 盡可能的推遲變量定義
    a. 不必要的函數調用開銷

33. 明智的使用內聯
    a. 內聯的好處
    b. 被外聯的內聯函數的編譯器處理上:首先都要承擔函數調用的代價,其次舊的編譯器還可能作為static函數處理來函數的鏈接的二義性
    c. 慎重選擇內聯,重視編譯器的警告
    d. 內聯的關鍵字是針對實現定義部分的,不是針對聲明的
    e. 取內聯函數的地址會導致編譯器為此生成一個函數體,認為破壞內聯定義
    f. 類成員函數聲明時候同時定義函數體,默認成內聯
    g. 在新的編譯器上面,內聯是一個不穩定的屬性,至于在代碼里的是否展開不能定論這個函數是否內聯
    h. 在編譯器看來多態始終比內聯重要。在編譯期間,靜態調用是可以展開的,動態的不可以
    i. 內聯是否展開除了要看本身代碼的復雜度外還有其他因素影響:編譯器的內聯開關,調用方式
    j. 在新的編譯器看來不管內聯的是否展開或是否外聯,亦或是否綜合使用,記住,代碼實體只有一份
    k. 虛函數與內聯的結合是一個很特殊的例子。

34. 降低文件間的編譯依賴性
    a. 前向聲明 & 句柄類 & 協議類

繼承和面向對象設計

C++提供了多種很令人困惑的面向對象構造部件,包括公有、保護和私有基類;虛擬和非虛擬基類;虛擬和非虛擬成員函數。這些部件不僅互相之間有聯系,還和C++的其它部分相互作用。所以,對于每種部件的含義、什么時候該用它們、怎樣最好地和C++中非面向對象部分相結合?

經典問題:
    a. 假如需要設計一組具有共同特征的類,是該使用繼承使得所有的類都派生于一個共同的基類呢,還是使用模板使得它們都從一個共同的代碼框架中產生?
    b. 類A 的實現要用到類B,是讓A 擁有一個類型為B 的數據成員呢,還是讓A 私有繼承于B?
    c. 假設想設計一個標準庫中沒有提供的、類型安全的同族容器類(條款49列出了標準庫實際提供的容器類),是使用模板呢,還是最好為某個 "自身用普通(void*)指針來實現" 的類建立類型安全的接口?

35. 公有繼承體現‘是一個’的含義

36. 區分接口繼承和實現繼承
    a. 純虛函數的目的在于:使派生類僅僅是繼承函數的接口
    b. 簡單虛函數的目的在于:使派生類繼承函數的接口和缺省實現
    c. 非虛函數的目的在于:使派生類繼承函數的接口和強制實現

37. 決不要重新定義繼承而來得非虛函數
    a. 非虛函數是靜態綁定,虛函數是動態綁定

38. 決不要重新定義繼承而來的缺省參數值
    a. 缺省參數值也是靜態綁定的

39. 避免‘向下轉換’繼承層次
    a. 向下意味著向派生類轉換
    b. 如何消除向下轉換:虛函數;加強類型約束;dynamic_cast

40. 通過分層來體現‘有一個’或‘用……來實現’

41. 區分繼承和模板
    a. 兩者的區別在于類型T是否影響類的行為

42. 明智的使用私有繼承
    a. 私有繼承常用語實現而非設計
    b. 實例化模板導致代碼膨脹
    c. 示例代碼設計:

 1 template<class T>
 2 class Stack: private GenericStack {
 3 public:
 4  void push(T *objectPtr) { GenericStack::push(objectPtr); }
 5  T * pop() return static_cast<T*>(GenericStack::pop()); }
 6  bool empty() const return GenericStack::empty(); }
 7 }

 8
 9 class GenericStack {
10 protected:
11  GenericStack();
12  ~GenericStack();
13  void push(void *object);
14  void * pop();
15  bool empty() const;
16 private:
17  // 同上
18 }

19

 

43. 明智的使用多繼承
    a. adapter 是一個很好的多繼承的例子
    b. 虛繼承的實現以及構造特性

44. 說你想說的,理解你說想說的
    a. 整盤的設計考慮
    b. 共同的基類意味著共同的特性; 公有繼承意味著是一個, 私有繼承意味著用什么來實現, 分層意味著有一個或者用……來實現
    c. 對于公有繼承而言:純虛函數意味著繼承接口,簡單虛函數意味著繼承函數的接口加上一個缺省實現,非虛函數意味著繼承數的接口加上一個強制實現(特殊性上的不變性)

雜項

45. 弄清楚C++在幕后為你所作的
    a. 缺省類成員函數:構造,拷貝構造,析構(虛待定),賦值,取址(2個)
    b. 注意:如果需要這些函數才會被生成
    c. 賦值操作必須驗證合法才能通過編譯器

46. 寧可編譯和鏈接時出錯,也不要運行時出錯

47. 確保非局部靜態對象在使用前被初始化
    a. 初始化的順序不確定導致很難捕捉這個靜態對象初始化的順序
    b. 解決辦法:singleton

48. 重視編譯器警告

49. 重視標準庫

posted on 2007-04-10 12:23 MicroYang 閱讀(366) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(1)

隨筆檔案

Friend

  • Catherine
  • 深海羚羊
  • 似雨打芭蕉,似風吹梧桐葉,帶著一絲冰冷,也帶著一絲清新------冰柔語絲

搜索

  •  

最新評論

  • 1.?re: 本立道生[未登錄]
  • 極端情況下,容器的size很大,inline帶來的performance的提高不可忽視。但是問題問的是仿函數普遍的優點。能保存數據才是標準answer
  • --zxx
  • 2.?re: 本立道生
  • 理解有誤。函數對象可實現函數指針不能實現的功能才是主要的。
  • --佚名
  • 3.?re: 打算學習算法
  • 汗顏的很,細節的地方實在是沒有注意。應該是全排列才對。實在抱歉的很!
  • --MicroYang
  • 4.?re: 打算學習算法
  • permutation
  • --Rome
  • 5.?re: 打算學習算法[未登錄]
  • 呵呵,樓主在注釋里面寫得很清楚啊
    "*Description: It uses recursive to enumerate all cases. ”
  • --Sandy

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲第一页在线| 亚洲精品久久久久久久久| 亚洲影院色无极综合| 欧美性大战久久久久久久蜜臀| 日韩手机在线导航| 99riav久久精品riav| 国产精品乱码一区二区三区| 亚洲欧美中文字幕| 久久成人精品电影| 亚洲人体影院| 中文有码久久| 国产字幕视频一区二区| 欧美黄色视屏| 欧美丝袜第一区| 久久久国产精品一区| 欧美成人xxx| 亚洲一区3d动漫同人无遮挡| 欧美一级日韩一级| 最近中文字幕日韩精品| 宅男在线国产精品| 狠狠爱www人成狠狠爱综合网| 欧美大片在线观看| 国产精品久久久久久久久久久久| 久久久精品国产一区二区三区| 久久影视三级福利片| 亚洲天堂av在线免费| 久久久久久久一区| 亚洲一区免费| 久久男人资源视频| 亚洲欧美日韩第一区| 另类欧美日韩国产在线| 亚洲一区二区欧美| 免费日本视频一区| 久久成人羞羞网站| 欧美日韩一区自拍| 欧美成人一区二区在线| 国产精品一区二区久久国产| 亚洲高清久久久| 国内精品久久久久久| 一二三四社区欧美黄| 亚洲国产精品va| 欧美一区二区高清在线观看| 妖精视频成人观看www| 久久理论片午夜琪琪电影网| 香蕉久久一区二区不卡无毒影院| 欧美激情亚洲一区| 欧美不卡视频| 在线播放中文一区| 久久成人在线| 欧美一区二区三区四区在线| 欧美日韩一区二区国产| 亚洲第一精品影视| 1769国产精品| 久久蜜桃香蕉精品一区二区三区| 欧美一区二区三区精品| 国产精品劲爆视频| 这里只有视频精品| 这里只有精品在线播放| 欧美国产精品日韩| 欧美激情自拍| 亚洲精品国产拍免费91在线| 久久免费99精品久久久久久| 久久字幕精品一区| 精品99视频| 久久美女性网| 欧美丰满高潮xxxx喷水动漫| 在线观看日韩一区| 蜜臀av在线播放一区二区三区| 你懂的亚洲视频| 亚洲国产精品久久久| 女仆av观看一区| 亚洲国产精品成人| 9i看片成人免费高清| 欧美精品97| 夜夜精品视频一区二区| 亚洲一区国产| 国产三区二区一区久久| 性欧美大战久久久久久久免费观看 | 欧美在线免费观看视频| 久久久久久尹人网香蕉| 亚洲第一精品影视| 欧美刺激性大交免费视频| 亚洲伦理久久| 香蕉乱码成人久久天堂爱免费| 国产三级欧美三级| 久久免费国产| 99国产精品99久久久久久| 欧美伊人久久久久久午夜久久久久 | 欧美国产日本在线| 亚洲天堂久久| 久久久免费观看视频| 亚洲激情国产| 国产精品成人一区二区三区吃奶| 午夜免费日韩视频| 欧美电影免费观看高清| 亚洲视频你懂的| 狠狠网亚洲精品| 欧美精品色综合| 亚洲综合清纯丝袜自拍| 欧美成人精品一区| 亚洲视频在线免费观看| 狠狠色丁香婷婷综合| 欧美精彩视频一区二区三区| 亚洲一二三区精品| 欧美激情一区二区三区蜜桃视频 | 欧美成人三级在线| 性欧美长视频| 日韩一级在线| 激情文学一区| 国产精品欧美在线| 欧美成ee人免费视频| 亚洲综合视频在线| 亚洲国产三级网| 久久久噜噜噜久久久| 中文在线资源观看网站视频免费不卡 | 欧美人牲a欧美精品| 欧美在线三区| 亚洲香蕉在线观看| 亚洲欧洲日夜超级视频| 久久久久久亚洲综合影院红桃| 亚洲午夜伦理| 日韩视频中文| 亚洲人www| **性色生活片久久毛片| 国产偷久久久精品专区| 欧美日韩午夜精品| 欧美精品在线极品| 免费观看30秒视频久久| 久久精品视频在线免费观看| 亚洲免费在线精品一区| 99国产精品99久久久久久| 91久久精品国产| 欧美成人久久| 欧美国产日韩免费| 麻豆免费精品视频| 久久字幕精品一区| 狼狼综合久久久久综合网 | 亚洲最新视频在线| 亚洲精品免费在线观看| 亚洲激情偷拍| 亚洲人体影院| 亚洲人妖在线| 日韩亚洲精品在线| 99在线精品观看| 亚洲午夜精品17c| 亚洲婷婷免费| 香蕉亚洲视频| 欧美在线亚洲| 久久午夜精品| 欧美成人午夜影院| 亚洲国产精品视频一区| 亚洲经典在线看| 99av国产精品欲麻豆| 一区二区三区你懂的| 亚洲一区二区在线视频| 午夜伦理片一区| 久久精品一本| 欧美激情2020午夜免费观看| 欧美另类在线观看| 国产精品毛片a∨一区二区三区|国| 欧美午夜免费电影| 国产亚洲欧美日韩美女| 伊人成人开心激情综合网| 亚洲国产日韩欧美在线99| 亚洲免费观看高清在线观看 | 亚洲欧洲一区二区三区久久| 亚洲精品久久久久久久久久久久久| 亚洲精品资源| 亚洲天堂免费在线观看视频| 性色av一区二区怡红| 久久人人爽人人爽爽久久| 欧美韩日一区二区| 国产精品日产欧美久久久久| 国产综合自拍| 一本色道久久综合一区| 香港成人在线视频| 欧美大片国产精品| 99精品99| 久久亚洲美女| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 免费欧美在线| 国产精品久久久久久久久免费樱桃 | 亚洲天堂av高清| 久久久www| 亚洲精品在线二区| 久久久久成人精品免费播放动漫| 欧美精品一区二区蜜臀亚洲| 国产日韩精品视频一区二区三区| 亚洲国产一区二区三区a毛片 | 在线观看欧美激情| 午夜精品三级视频福利| 欧美激情va永久在线播放| 午夜精品久久久久久久蜜桃app | …久久精品99久久香蕉国产 | 在线午夜精品自拍| 久久综合狠狠综合久久综青草| 99精品福利视频| 暖暖成人免费视频| 狠久久av成人天堂| 午夜在线不卡|