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

隨筆-19  評論-2  文章-0  trackbacks-0

畢業(yè)設(shè)計(jì)中途重讀了幾本以前看過的書,需要做些筆記做日后查閱時使用。
偶然看到 Justin 寫的《Effective C++》筆記,為方便就結(jié)章轉(zhuǎn)載在此。

========================
Effective C++   C++
書作者:Scott Meyers
原筆記作者:Justin : http://m.shnenglu.com/note-of-justin/
========================

Item 1 :C++是一個語言聯(lián)邦
--------------------------
 tag: c c++組成

 C  
  區(qū)塊(blocks)、語句(statements)、預(yù)處理器(preprocessor)、內(nèi)置數(shù)據(jù)類型(built-in data types)、數(shù)組(arrays)、指針(pointers)。
  
 Object-Oriented C++
  classes(包括構(gòu)造、析構(gòu))、封裝(encapsulation)、繼承(inheritance)、多態(tài)(polymorphism)、virtual函數(shù)(動態(tài)綁定)

 Template C++
  泛型編程(generic programming)  Template metaprogramming(TMP,模版元編程)

 STL
  容器(containers)、迭代器(iterators)、算法(algorithms)、函數(shù)對象(function objects)
  
 每個語言都有自己的次規(guī)則


Item 2  :用const、enum和模板inline推翻#define的統(tǒng)治
---------------------------------------------------
 tag: const enum inline #define
 
 需要定義常量時,不要用#define,改用const修飾的變量或是用enum吧
 要想寫一些簡短小函數(shù)時,別考慮#define啦,改用template+inline吧

 原因是若為浮點(diǎn)變量,用const減小了代碼大小,同時還使得封裝(encapsulation)變得可行(宏被定義后,在之后的編譯過程都有效,除非undef ),而且,在調(diào)試的時候,因?yàn)閏onst定義的變量是會加在符號表(Symbol Table)的,就比define常量要方便跟蹤了(在預(yù)處理階段,常量的名字就已經(jīng)被替換掉了)
 在一些特定的情況下(編譯器不允許“static整數(shù)型class常量”完成“in class 初值設(shè)定” ),如果不能用const取代#define,就用enum。除了不能獲取一個enum的地址之外,這種方法和const的用法其實(shí)差不多。
 可以取一個const的地址,不能取一個enum的地址,通常不能取一個#define的地址。
 
 inline函數(shù)和宏有個共同的地方,他們都不會有函數(shù)調(diào)用的棧的開銷。再喊上模板(template)來幫忙,就不用去考慮實(shí)際調(diào)用時的參數(shù)類型。


Item 3  :盡可能使用const
--------------------------------------------------
 tag: const  non-const  conceptual constness  mutable
 
 ·首先要知道const可以通用在對象上,函數(shù)參數(shù)和返回值上,甚至是用在限制函數(shù)本身。
 ·const 出現(xiàn)在星號左邊,表式被指物是常量;出現(xiàn)在星號右邊,指針自身是常量;
 ·兩個成員函數(shù)如果只是常量性(constness)不同,可以被重載。
 ·const和non-const成員函數(shù)的實(shí)現(xiàn)等價時,可以用non-const版本調(diào)用const版本避免代碼重復(fù)。
 
    Compilers enforce bitwise constness, but you should program using conceptual constness.

 這里有提到constness(常量性)的兩個門派: bitwise學(xué)院派和conceptual實(shí)用派。
 bitwise constness陣營應(yīng)該都是很學(xué)究的,這里認(rèn)為如果一個函數(shù)被聲明是const,你就絕對不能修改對象里的任何成員(static成員除外)。
 主張conceptual constness流的當(dāng)然都比較好說話,雖然你是const黨,但需要的時候,還是應(yīng)該有例外的嘛。正所謂人無完人,const也沒有絕對的const~
 
  conceptual constness可以這樣解釋:具備conceptual constness的對象/函數(shù),其行為對于該對象/函數(shù)以外的數(shù)據(jù)是const的,不會篡改別人的東東。但是不保證它 不會修改對象/函數(shù)內(nèi)部的成員:當(dāng)這些成員用mutable修飾的時候,我們可以在一個const函數(shù)中修改這些mutable成員的值。
 所以說這樣的constness是概念上的,實(shí)際上在這樣的函數(shù)中有可能改變了一些變量的值,只不過沒有與它聲稱的constness矛盾而已。

 用mutable限定的對象,哪怕是在const函數(shù)里,一樣可以修改!

 和const有關(guān)的還有在const和非const對象間的轉(zhuǎn)換問題(用const_cast和static_cast完成兩個方向的轉(zhuǎn)換),不過層次太高,我還沒能看到有需要用的地方

 const char& operator[](size_t position) const {
  ...
 }
 char& operator[](size_t position)   //調(diào)用已經(jīng)實(shí)現(xiàn)的const op[]
 {
      return const_cast<char&> (     //將const op[] 的返回值中移除 const
                  static_cast<const CClass&>(*this)   //將*this轉(zhuǎn)型為 const,指明調(diào)用的是const版本的op[]
                  [position] );
 }


Item 4  :對象初始化
--------------------------------------------
 tag:local static , 初始化列表, 賦值(assignment)
 
 ·對于內(nèi)建的對象類型,手工初始化。
 ·對于對象自身的成員,推薦的方法是在構(gòu)造函數(shù)的初始化列表。
 ·以logcal static 對象替換 non-local static對象,以避免“跨編譯單元之初始化次序”問題。
 
 賦值(assignment)的效率要比初始化(initialization)低,因?yàn)榍罢呦葮?gòu)造了對象再對他們賦值,在構(gòu)造的同時就也把值賦了。這里還沒加上拷貝構(gòu)造函數(shù)的可能開銷,還有一些類型如const變量、引用(reference)是不能用賦值的形式“初始化”的……
 如果在初始化某個對象的時候,有對其他對象是否有初始化的依賴(對不起,這里有點(diǎn)拗口),一定要確保其中所依賴的對象已經(jīng)初始化完畢。
 
 當(dāng)不同的對象的初始化存在相互依賴時,某個對象沒有初始化有可能導(dǎo)致另外一個對象初始化的失敗。
 當(dāng)初始化涉及到非局部靜態(tài)對象(non-local static object)時,問題更加明顯:非局部靜態(tài)對象如果定義在不同的文件中,他們就有可能位于不同的編譯單元(translation unit),因?yàn)檫@些對象到底誰先被初始化是不可預(yù)知的。
 編譯單元(translation unit):產(chǎn)出單一目標(biāo)文件(single object file)的那些源碼,通常為單一源碼文件加上所包含的頭文件。

 解決此類問題的一個方法是:把非局部靜態(tài)對象轉(zhuǎn)換為局部靜態(tài)對象(local static object),也就是把它的定義放在一個函數(shù)里。然后緊接著在這個函數(shù)返回該對象的引用。C++語言規(guī)定在調(diào)用一個含有局部靜態(tài)對象的函數(shù)時,其中的所有局部靜態(tài)對象都必須初始化。這個方法就是利用這一特性,將原本對一個非局部靜態(tài)對象的訪問,轉(zhuǎn)換為對一個函數(shù)的調(diào)用,這個函數(shù)會返回該靜態(tài)對象的引用,并且保證這個對象已經(jīng)被初始化了。

 如果需要初始化一個非局部靜態(tài)對象,就把它放到一個函數(shù)里,讓這個函數(shù)簡單的返回這個對象的引用。
 

 

posted on 2010-03-15 22:43 Euan 閱讀(601) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产欧美一区二区三区在线老狼| 欧美国产激情二区三区| 中文欧美字幕免费| 国模私拍一区二区三区| 国产精品国产精品| 欧美三级第一页| 欧美人成在线| 欧美另类在线观看| 欧美视频一区在线| 国产精品a久久久久| 欧美日韩专区在线| 欧美日韩三级| 欧美午夜精品理论片a级按摩| 欧美日韩国产欧| 国产精品久久久久久久久借妻 | 蜜臀久久99精品久久久画质超高清 | 欧美亚州韩日在线看免费版国语版| 夜夜嗨一区二区| 亚洲美女精品一区| 一本色道久久综合精品竹菊 | 久久久久久一区二区三区| 久久久精品久久久久| 看片网站欧美日韩| 欧美成人蜜桃| 欧美成人一品| 欧美日本三区| 国产精品一区二区女厕厕| 国产一区二区三区免费观看| 含羞草久久爱69一区| 亚洲精品久久久久久久久久久| 亚洲精品综合久久中文字幕| 亚洲视频综合在线| 久久成人国产精品| 欧美高潮视频| 一区二区三区毛片| 欧美综合国产| 欧美全黄视频| 国模精品娜娜一二三区| 亚洲美女毛片| 欧美在线一二三| 亚洲电影有码| 亚洲欧美激情诱惑| 免费在线成人av| 欧美日韩1区2区3区| 欧美刺激性大交免费视频| 久久免费精品视频| 欧美性色视频在线| 亚洲国产成人不卡| 亚洲欧美在线另类| 亚洲福利精品| 久久激情婷婷| 国产精品久久久久毛片大屁完整版| 国模私拍一区二区三区| 亚洲一区二区三区精品视频| 久久综合网hezyo| 亚洲欧美国产另类| 久久精品亚洲精品| 国产精品嫩草影院一区二区| 亚洲精品一二三区| 伊人久久综合97精品| 欧美激情影院| 海角社区69精品视频| 亚洲综合视频一区| 亚洲第一页自拍| 久久久久久久97| 欧美视频你懂的| 99视频超级精品| 久久中文字幕一区| 亚洲欧洲综合另类| 久久蜜桃资源一区二区老牛| 国产一区二区三区在线播放免费观看| av不卡在线观看| 久久精品欧美| 亚洲图片在区色| 欧美日韩国产一区二区三区地区| 国产精品va在线播放| 99riav久久精品riav| 亚洲成色精品| 久久综合电影一区| 国产精品极品美女粉嫩高清在线| 狠狠色综合色区| 亚洲婷婷国产精品电影人久久| 91久久久久久久久| 欧美精品日韩综合在线| 一区二区三区久久久| 亚洲精品少妇30p| 欧美日韩成人综合在线一区二区| 亚洲人成免费| 亚洲精品视频免费在线观看| 欧美国产在线观看| 日韩一级黄色大片| 亚洲精品影院| 欧美天天综合网| 欧美一区二区三区啪啪| 午夜精品亚洲| 在线国产欧美| 亚洲日本中文字幕| 国产精品久久久久久妇女6080 | 久久精品1区| 亚洲高清在线视频| 亚洲国产成人一区| 国产精品久久久爽爽爽麻豆色哟哟| 性欧美大战久久久久久久免费观看 | 国产日韩精品一区二区浪潮av| 欧美怡红院视频| 久久久久久婷| 亚洲婷婷综合色高清在线| 亚洲综合精品四区| 亚洲国产高清aⅴ视频| 99精品欧美一区二区三区综合在线| 欧美日韩视频| 午夜精品久久久久久| 这里只有精品视频| 99视频精品| 国产夜色精品一区二区av| 欧美jizz19性欧美| 国产精品v欧美精品v日韩| 久久影院午夜片一区| 欧美日韩在线一区| 牛夜精品久久久久久久99黑人| 欧美先锋影音| 欧美激情第二页| 国产精品成人午夜| 欧美v日韩v国产v| 欧美精品系列| 久久影院午夜论| 国产精品乱看| 亚洲二区在线观看| 国产一区二区三区日韩| 99天天综合性| 91久久综合| 久久久精品一区二区三区| 亚洲综合丁香| 欧美成人一区二区三区| 久色婷婷小香蕉久久| 国产精品亚洲第一区在线暖暖韩国| 蜜月aⅴ免费一区二区三区| 国产精品乱码久久久久久| 亚洲高清av| 亚洲国产精品999| 久久久亚洲综合| 久久久精品国产一区二区三区 | 国产精品国产三级国产普通话蜜臀| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品久久久久久av福利软件| 亚洲激情亚洲| 亚洲人精品午夜| 久久久国产精品一区二区中文 | 久久先锋影音av| 久久久亚洲国产美女国产盗摄| 欧美大片免费久久精品三p| 中文av一区特黄| 麻豆精品在线视频| 欧美大片在线看免费观看| 国产性做久久久久久| 欧美大尺度在线| 国产精品嫩草99av在线| 蜜臀久久99精品久久久久久9| 国产视频欧美视频| 亚洲一二三区在线观看| 亚洲视频中文字幕| 裸体歌舞表演一区二区| 欧美一区二区成人| 国产农村妇女精品| 99精品欧美一区| 亚洲欧美国产精品va在线观看| 欧美精品一区二区三| 欧美成人一品| 亚洲另类自拍| 国产偷国产偷精品高清尤物| 欧美高清你懂得| 亚洲免费观看在线观看| 欧美日韩中文在线观看| 蜜月aⅴ免费一区二区三区| 农村妇女精品| 亚洲欧美自拍偷拍| 亚洲国产美女| 国产欧美日韩麻豆91| 欧美激情第3页| 久久国产精品72免费观看| 最新日韩中文字幕| 久久精品系列| 亚洲一区在线看| 亚洲人被黑人高潮完整版| 国产免费观看久久黄| 欧美精品一区二区久久婷婷| 久久久999| 午夜日韩激情| 国产精品99久久99久久久二8| 亚洲第一页在线| 免费亚洲婷婷| 久久另类ts人妖一区二区| 性娇小13――14欧美| 亚洲无线视频| 99精品热6080yy久久| 91久久久一线二线三线品牌| 黄色一区二区在线| 国产综合香蕉五月婷在线| 国产精品美女午夜av| 欧美三区在线|