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

隨筆-19  評(píng)論-2  文章-0  trackbacks-0

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

========================
Effective C++   C++
書(shū)作者:Scott Meyers
原筆記作者:Justin : http://www.shnenglu.com/note-of-justin/
========================

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

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

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

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


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

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


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

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

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

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

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

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

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

 

posted on 2010-03-15 22:43 Euan 閱讀(601) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 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>
            国产综合色产在线精品| 性做久久久久久久免费看| 老色鬼精品视频在线观看播放| 国产主播一区二区三区| 欧美亚洲在线视频| 国产精品男女猛烈高潮激情| 亚洲午夜久久久久久久久电影院| 99精品欧美一区二区蜜桃免费| 欧美色图首页| 久久精品欧美日韩精品| 久久看片网站| 宅男66日本亚洲欧美视频 | 国产午夜精品久久久久久久| 久久爱91午夜羞羞| 欧美中文在线免费| 亚洲靠逼com| 亚洲视频免费观看| 国产综合色精品一区二区三区| 欧美护士18xxxxhd| 欧美日韩一区在线播放| 久久久久国产精品www| 免费国产一区二区| 亚洲欧美在线磁力| 久久综合伊人77777蜜臀| 一区二区三区久久精品| 欧美一区二区三区婷婷月色| 日韩一级免费观看| 欧美一区二区三区四区在线 | 欧美日韩亚洲网| 久久精品国产999大香线蕉| 免费日韩成人| 欧美一区2区三区4区公司二百| 女人色偷偷aa久久天堂| 久久er精品视频| 欧美日韩国产一中文字不卡| 另类人畜视频在线| 欧美午夜在线观看| 亚洲丰满在线| 国产欧美日韩三级| 日韩视频一区二区在线观看| 极品日韩久久| 性欧美1819sex性高清| 亚洲视频欧美视频| 免费视频一区| 免播放器亚洲一区| 国产欧美日韩专区发布| 亚洲精品久久久久久久久| 136国产福利精品导航网址应用| 中文成人激情娱乐网| 日韩亚洲欧美一区二区三区| 久久三级福利| 久久午夜色播影院免费高清| 国产精品永久免费观看| 一区二区三区你懂的| 日韩亚洲欧美一区| 欧美mv日韩mv国产网站| 嫩草影视亚洲| 1024成人| 麻豆精品一区二区综合av | 一本色道88久久加勒比精品 | 亚洲一区二区精品| 正在播放欧美一区| 欧美激情一区二区三区在线视频| 麻豆精品视频在线观看| 激情婷婷欧美| 美日韩丰满少妇在线观看| 国产女精品视频网站免费| a4yy欧美一区二区三区| 久久久久久久一区二区三区| 欧美在线视频免费播放| 国产九九视频一区二区三区| 亚洲欧美大片| 久久久久久久性| 影音先锋中文字幕一区二区| 久久久www| 欧美国产欧美亚洲国产日韩mv天天看完整 | 美女主播一区| 日韩亚洲欧美综合| 欧美日韩亚洲综合在线| 日韩视频精品| 久久福利毛片| 亚洲第一伊人| 欧美激情免费在线| 一本久久综合亚洲鲁鲁五月天| 亚洲一级黄色片| 国产日韩欧美视频| 久久综合九色欧美综合狠狠| 欧美激情在线观看| 亚洲一区二区黄| 国产亚洲欧美一区| 欧美黑人一区二区三区| 99国产精品99久久久久久| 香蕉乱码成人久久天堂爱免费 | 午夜激情综合网| 激情五月综合色婷婷一区二区| 久久最新视频| 亚洲一二三四久久| 欧美成年人视频网站| 一区二区欧美精品| 国产精品久久久一本精品| 久久精品噜噜噜成人av农村| 亚洲高清不卡av| 午夜精品免费| 亚洲乱码国产乱码精品精98午夜 | 欧美精品一区二区三| 亚洲一区二区网站| 亚洲福利久久| 久久精品国产2020观看福利| 亚洲伦理网站| 黄色亚洲网站| 国产精品捆绑调教| 欧美夫妇交换俱乐部在线观看| 亚洲一区二区三区高清 | 久久久久久尹人网香蕉| 一区二区三区欧美亚洲| 亚洲国产精品久久精品怡红院| 国产精品v欧美精品v日本精品动漫| 老鸭窝91久久精品色噜噜导演| 亚洲视频在线免费观看| 亚洲精品少妇30p| 媚黑女一区二区| 久久本道综合色狠狠五月| 日韩视频永久免费| 亚洲午夜精品福利| 亚洲精品乱码久久久久久按摩观| 久久九九热免费视频| 亚洲欧美www| 亚洲最新色图| 99伊人成综合| 亚洲精品欧美激情| 伊人蜜桃色噜噜激情综合| 国产日韩一区二区三区| 国产精品久线观看视频| 国产精品超碰97尤物18| 欧美剧在线观看| 欧美高清在线视频观看不卡| 久久视频在线看| 久久青草久久| 牛牛影视久久网| 欧美成人精品一区| 免费成人黄色片| 麻豆国产精品777777在线 | 夜夜嗨av一区二区三区免费区| 亚洲日韩欧美一区二区在线| 亚洲欧洲在线视频| 亚洲国产乱码最新视频| 亚洲福利在线视频| 最新国产拍偷乱拍精品| 亚洲片国产一区一级在线观看| 亚洲人久久久| 亚洲午夜视频在线| 亚洲免费人成在线视频观看| 亚洲女同性videos| 欧美一区二区在线免费播放| 久久精品国产77777蜜臀| 久久久久久亚洲精品中文字幕| 久久久久久综合网天天| 欧美成年人视频网站欧美| 欧美二区在线播放| 欧美小视频在线| 国产亚洲va综合人人澡精品| 精品51国产黑色丝袜高跟鞋| 亚洲日本免费| 亚洲视频日本| 久久久久久夜精品精品免费| 欧美α欧美αv大片| 亚洲精品乱码久久久久久| 亚洲视屏在线播放| 久久国产精品99久久久久久老狼 | 性娇小13――14欧美| 免费成人高清视频| 国产精品丝袜久久久久久app| 国产欧美日韩中文字幕在线| 亚洲国产清纯| 亚洲一区二区三区高清 | 在线视频亚洲欧美| 欧美影院午夜播放| 欧美高清在线播放| 亚洲小说欧美另类社区| 久久久久久一区| 欧美视频免费在线观看| 韩国v欧美v日本v亚洲v| 在线亚洲+欧美+日本专区| 久久视频一区二区| 91久久中文字幕| 久久国产精品电影| 欧美深夜福利| 亚洲激情一区二区| 午夜国产一区| 亚洲美女黄色| 蜜桃av噜噜一区| 国产综合亚洲精品一区二| 在线综合亚洲| 亚洲韩国日本中文字幕| 欧美在线二区| 国产精品久久久久影院亚瑟| 亚洲美女av黄| 欧美成人激情视频| 欧美一区=区| 国产精品色婷婷|