• <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>
            蝸牛的家
            男兒當(dāng)自強(qiáng)
            posts - 48,  comments - 21,  trackbacks - 0
                 摘要: If the source and destination overlap, memcpy does not ensure that the original source bytes in the overlapping region are copied before being overwritten. Use memmove to handle overlapping regions
            如果原始資料source和目的單元格destination(的地址)重復(fù)了。在重復(fù)區(qū)域的原始source的字節(jié)被覆蓋以前,memcpy不能保證這些區(qū)域被拷貝。使用memove來(lái)處理重復(fù)的區(qū)域。  閱讀全文
            posted @ 2008-10-15 10:31 黑色天使 閱讀(2730) | 評(píng)論 (5)編輯 收藏
             多重定義錯(cuò)誤,一般是頭文件多次包含造成的,可以在LINK參數(shù)里面加入/FORCE:MULTIPLE解決
            posted @ 2008-10-09 11:03 黑色天使 閱讀(536) | 評(píng)論 (0)編輯 收藏
              仔細(xì)想想地位卑賤的類(lèi)型轉(zhuǎn)換功能(cast),其在程序設(shè)計(jì)中的地位就象goto語(yǔ)句一樣令人鄙視。但是它還不是無(wú)法令人忍受,因?yàn)楫?dāng)在某些緊要的關(guān)頭,類(lèi)型轉(zhuǎn)換還是必需的,這時(shí)它是一個(gè)必需品。   
              不過(guò)C風(fēng)格的類(lèi)型轉(zhuǎn)換并不代表所有的類(lèi)型轉(zhuǎn)換功能。   
              一來(lái)它們過(guò)于粗魯,能允許你在任何類(lèi)型之間進(jìn)行轉(zhuǎn)換。不過(guò)如果要進(jìn)行更精確的類(lèi)型轉(zhuǎn)換,這會(huì)是一個(gè)優(yōu)點(diǎn)。在這些類(lèi)型轉(zhuǎn)換中存在著巨大的不同,例如把一個(gè)指向const對(duì)象的指針(pointer-to-const-object)轉(zhuǎn)換成指向非const對(duì)象的指針(pointer-to-non-const-object)(即一個(gè)僅僅去除const的類(lèi)型轉(zhuǎn)換),把一個(gè)指向基類(lèi)的指針轉(zhuǎn)換成指向子類(lèi)的指針(即完全改變對(duì)象類(lèi)型)。傳統(tǒng)的C風(fēng)格的類(lèi)型轉(zhuǎn)換不對(duì)上述兩種轉(zhuǎn)換進(jìn)行區(qū)分。(這一點(diǎn)也不令人驚訝,因?yàn)镃風(fēng)格的類(lèi)型轉(zhuǎn)換是為C語(yǔ)言設(shè)計(jì)的,而不是為C++語(yǔ)言設(shè)計(jì)的)。   
              二來(lái)C風(fēng)格的類(lèi)型轉(zhuǎn)換在程序語(yǔ)句中難以識(shí)別。在語(yǔ)法上,類(lèi)型轉(zhuǎn)換由圓括號(hào)和標(biāo)識(shí)符組成,而這些可以用在C++中的任何地方。這使得回答象這樣一個(gè)最基本的有關(guān)類(lèi)型轉(zhuǎn)換的問(wèn)題變得很困難:“在這個(gè)程序中是否使用了類(lèi)型轉(zhuǎn)換?”。這是因?yàn)槿斯ら喿x很可能忽略了類(lèi)型轉(zhuǎn)換的語(yǔ)句,而利用象grep的工具程序也不能從語(yǔ)句構(gòu)成上區(qū)分出它們來(lái)。   
              C++通過(guò)引進(jìn)四個(gè)新的類(lèi)型轉(zhuǎn)換操作符克服了C風(fēng)格類(lèi)型轉(zhuǎn)換的缺點(diǎn),這四個(gè)操作符是,   static_cast,   const_cast,   dynamic_cast,   和reinterpret_cast。在大多數(shù)情況下,對(duì)于這些操作符你只需要知道原來(lái)你習(xí)慣于這樣寫(xiě),   
              (type)   expression   
              而現(xiàn)在你總應(yīng)該這樣寫(xiě):   
              static_cast<type>(expression)   
              例如,假設(shè)你想把一個(gè)int轉(zhuǎn)換成double,以便讓包含int類(lèi)型變量的表達(dá)式產(chǎn)生出浮點(diǎn)數(shù)值的結(jié)果。如果用C風(fēng)格的類(lèi)型轉(zhuǎn)換,你能這樣寫(xiě):   
              int   firstNumber,   secondNumber;   
              ...   
              double   result   =   ((double)firstNumber)/secondNumber;   
              如果用上述新的類(lèi)型轉(zhuǎn)換方法,你應(yīng)該這樣寫(xiě):   
              double   result   =   static_cast<double>(firstNumber)/secondNumber;   
              這樣的類(lèi)型轉(zhuǎn)換不論是對(duì)人工還是對(duì)程序都很容易識(shí)別。   
              static_cast在功能上基本上與C風(fēng)格的類(lèi)型轉(zhuǎn)換一樣強(qiáng)大,含義也一樣。它也有功能上限制。例如,你不能用static_cast象用C風(fēng)格的類(lèi)型轉(zhuǎn)換一樣把struct轉(zhuǎn)換成int類(lèi)型或者把double類(lèi)型轉(zhuǎn)換成指針類(lèi)型,另外,static_cast不能從表達(dá)式中去除const屬性,因?yàn)榱硪粋€(gè)新的類(lèi)型轉(zhuǎn)換操作符const_cast有這樣的功能。  
              其它新的C++類(lèi)型轉(zhuǎn)換操作符被用在需要更多限制的地方。const_cast用于類(lèi)型轉(zhuǎn)換掉表達(dá)式的const或volatileness屬性。通過(guò)使用const_cast,你向人們和編譯器強(qiáng)調(diào)你通過(guò)類(lèi)型轉(zhuǎn)換想做的只是改變一些東西的constness或者   volatileness屬性。這個(gè)含義被編譯器所約束。如果你試圖使用const_cast來(lái)完成修改constness   或者volatileness屬性之外的事情,你的類(lèi)型轉(zhuǎn)換將被拒絕。下面是一些例子:   
              class   Widget   {   ...   };   
              class   SpecialWidget:   public   Widget   {   ...   };   
              void   update(SpecialWidget   *psw);   
              SpecialWidget   sw;                                 //   sw   是一個(gè)非const   對(duì)象。   
              const   SpecialWidget&   csw   =   sw;       //   csw   是sw的一個(gè)引用   
                                                                              //   它是一個(gè)const   對(duì)象     
              update(&csw);     //   錯(cuò)誤!不能傳遞一個(gè)const   SpecialWidget*   變量   
                                            //   給一個(gè)處理SpecialWidget*類(lèi)型變量的函數(shù)     
              update(const_cast<SpecialWidget*>(&csw));   
              //   正確,csw的const被顯示地轉(zhuǎn)換掉(   
              //   csw和sw兩個(gè)變量值在update   
              //函數(shù)中能被更新)     
              update((SpecialWidget*)&csw);   
                                                                //   同上,但用了一個(gè)更難識(shí)別   
                                                                //的C風(fēng)格的類(lèi)型轉(zhuǎn)換   
              Widget   *pw   =   new   SpecialWidget;     
              update(pw);                   //   錯(cuò)誤!pw的類(lèi)型是Widget*,但是   
                                                      //   update函數(shù)處理的是SpecialWidget*類(lèi)型     
              update(const_cast<SpecialWidget*>(pw));   
                                                      //   錯(cuò)誤!const_cast僅能被用在影響   
                                                      //   constness   or   volatileness的地方上。,   
                                                      //   不能用在向繼承子類(lèi)進(jìn)行類(lèi)型轉(zhuǎn)換。   
              到目前為止,const_cast最普通的用途就是轉(zhuǎn)換掉對(duì)象的const屬性。   
              第二種特殊的類(lèi)型轉(zhuǎn)換符是dynamic_cast,它被用于安全地沿著類(lèi)的繼承關(guān)系向下進(jìn)行類(lèi)型轉(zhuǎn)換。這就是說(shuō),你能用dynamic_cast把指向基類(lèi)的指針或引用轉(zhuǎn)換成指向其派生類(lèi)或其兄弟類(lèi)的指針或引用,而且你能知道轉(zhuǎn)換是否成功。失敗的轉(zhuǎn)換將返回空指針(當(dāng)對(duì)指針進(jìn)行類(lèi)型轉(zhuǎn)換時(shí))或者拋出異常(當(dāng)對(duì)引用進(jìn)行類(lèi)型轉(zhuǎn)換時(shí)):   
              Widget   *pw;   
              ...   
              update(dynamic_cast<SpecialWidget*>(pw));   
              //   正確,傳遞給update函數(shù)一個(gè)指針   
              //   是指向變量類(lèi)型為SpecialWidget的pw的指針   
              //   如果pw確實(shí)指向一個(gè)對(duì)象,   
              //   否則傳遞過(guò)去的將使空指針。   
              void   updateViaRef(SpecialWidget&   rsw);   
              updateViaRef(dynamic_cast<SpecialWidget&>(*pw));   
                                                                //正確。   傳遞給updateViaRef函數(shù)   
                                                                //   SpecialWidget   pw   指針,如果pw     
                                                                //   確實(shí)指向了某個(gè)對(duì)象   
                                                                //   否則將拋出異常   
              dynamic_casts在幫助你瀏覽繼承層次上是有限制的。它不能被用于沒(méi)有虛函數(shù)的類(lèi)型上,因?yàn)樗玫筋?lèi)的運(yùn)行時(shí)信息,這個(gè)多保存于Vtablez中,也不能用它來(lái)轉(zhuǎn)換掉constness:   
              int   firstNumber,   secondNumber;   
              ...   
              double   result   =   dynamic_cast<double>(firstNumber)/secondNumber;   
                                                                //   錯(cuò)誤!沒(méi)有繼承關(guān)系   
              const   SpecialWidget   sw;   
              ...   
              update(dynamic_cast<SpecialWidget*>(&sw));   
                                                                //   錯(cuò)誤!   dynamic_cast不能轉(zhuǎn)換   
                                                                //   掉const。   
              如你想在沒(méi)有繼承關(guān)系的類(lèi)型中進(jìn)行轉(zhuǎn)換,你可能想到static_cast。如果是為了去除const,你總得用const_cast。   
              這四個(gè)類(lèi)型轉(zhuǎn)換符中的最后一個(gè)是reinterpret_cast。使用這個(gè)操作符的類(lèi)型轉(zhuǎn)換,其的轉(zhuǎn)換結(jié)果幾乎都是執(zhí)行期定義(implementation-defined)。因此,使用reinterpret_casts的代碼很難移植。   
              reinterpret_casts的最普通的用途就是在函數(shù)指針類(lèi)型之間進(jìn)行轉(zhuǎn)換。例如,假設(shè)你有一個(gè)函數(shù)指針數(shù)組:  
              typedef   void   (*FuncPtr)();             //   FuncPtr   is   一個(gè)指向函數(shù)   
                                                                              //   的指針,該函數(shù)沒(méi)有參數(shù)   
              //   返回值類(lèi)型為void   
              FuncPtr   funcPtrArray[10];               //   funcPtrArray   是一個(gè)能容納   
                                                                              //   10個(gè)FuncPtrs指針的數(shù)組   
              讓我們假設(shè)你希望(因?yàn)槟承┠涿畹脑颍┌岩粋€(gè)指向下面函數(shù)的指針存入funcPtrArray數(shù)組:   
              int   doSomething();   
              你不能不經(jīng)過(guò)類(lèi)型轉(zhuǎn)換而直接去做,因?yàn)閐oSomething函數(shù)對(duì)于funcPtrArray數(shù)組來(lái)說(shuō)有一個(gè)錯(cuò)誤的類(lèi)型。在FuncPtrArray數(shù)組里的函數(shù)返回值是void類(lèi)型,而doSomething函數(shù)返回值是int類(lèi)型。   
              funcPtrArray[0]   =   &doSomething;           //   錯(cuò)誤!類(lèi)型不匹配     
              reinterpret_cast可以讓你迫使編譯器以你的方法去看待它們:   
              funcPtrArray[0]   =                                       //   this   compiles   
                  reinterpret_cast<FuncPtr>(&doSomething);   
              轉(zhuǎn)換函數(shù)指針的代碼是不可移植的(C++不保證所有的函數(shù)指針都被用一樣的方法表示),在一些情況下這樣的轉(zhuǎn)換會(huì)產(chǎn)生不正確的結(jié)果(參見(jiàn)條款M31),所以你應(yīng)該避免轉(zhuǎn)換函數(shù)指針類(lèi)型,除非你處于著背水一戰(zhàn)和尖刀架喉的危急時(shí)刻。一把鋒利的刀。一把非常鋒利的刀。   
              如果你使用的編譯器缺乏對(duì)新的類(lèi)型轉(zhuǎn)換方式的支持,你可以用傳統(tǒng)的類(lèi)型轉(zhuǎn)換方法代替static_cast,   const_cast,   以及reinterpret_cast。也可以用下面的宏替換來(lái)模擬新的類(lèi)型轉(zhuǎn)換語(yǔ)法:   
              #define   static_cast(TYPE,EXPR)               ((TYPE)(EXPR))   
              #define   const_cast(TYPE,EXPR)                 ((TYPE)(EXPR))   
              #define   reinterpret_cast(TYPE,EXPR)     ((TYPE)(EXPR))   
              你可以象這樣使用使用:   
              double   result   =   static_cast(double,   firstNumber)/secondNumber;   
              update(const_cast(SpecialWidget*,   &sw));   
              funcPtrArray[0]   =   reinterpret_cast(FuncPtr,   &doSomething);   
              這些模擬不會(huì)象真實(shí)的操作符一樣安全,但是當(dāng)你的編譯器可以支持新的的類(lèi)型轉(zhuǎn)換時(shí),它們可以簡(jiǎn)化你把代碼升級(jí)的過(guò)程。   
              沒(méi)有一個(gè)容易的方法來(lái)模擬dynamic_cast的操作,但是很多函數(shù)庫(kù)提供了函數(shù),安全地在派生類(lèi)與基類(lèi)之間進(jìn)行類(lèi)型轉(zhuǎn)換。如果你沒(méi)有這些函數(shù)而你有必須進(jìn)行這樣的類(lèi)型轉(zhuǎn)換,你也可以回到C風(fēng)格的類(lèi)型轉(zhuǎn)換方法上,但是這樣的話(huà)你將不能獲知類(lèi)型轉(zhuǎn)換是否失敗。當(dāng)然,你也可以定義一個(gè)宏來(lái)模擬dynamic_cast的功能,就象模擬其它的類(lèi)型轉(zhuǎn)換一樣:   
              #define   dynamic_cast(TYPE,EXPR)           (TYPE)(EXPR)   
              請(qǐng)記住,這個(gè)模擬并不能完全實(shí)現(xiàn)dynamic_cast的功能,它沒(méi)有辦法知道轉(zhuǎn)換是否失敗。   
              我知道,是的,我知道,新的類(lèi)型轉(zhuǎn)換操作符不是很美觀(guān)而且用鍵盤(pán)鍵入也很麻煩。如果你發(fā)現(xiàn)它們看上去實(shí)在令人討厭,C風(fēng)格的類(lèi)型轉(zhuǎn)換還可以繼續(xù)使用并且合法。然而,正是因?yàn)樾碌念?lèi)型轉(zhuǎn)換符缺乏美感才能使它彌補(bǔ)了在含義精確性和可辨認(rèn)性上的缺點(diǎn)。并且,使用新類(lèi)型轉(zhuǎn)換符的程序更容易被解析(不論是對(duì)人工還是對(duì)于工具程序),它們?cè)试S編譯器檢測(cè)出原來(lái)不能發(fā)現(xiàn)的錯(cuò)誤。這些都是放棄C風(fēng)格類(lèi)型轉(zhuǎn)換方法的強(qiáng)有力的理由。還有第三個(gè)理由:也許讓類(lèi)型轉(zhuǎn)換符不美觀(guān)和鍵入麻煩是一件好事。   
            posted @ 2008-09-28 15:12 黑色天使 閱讀(254) | 評(píng)論 (0)編輯 收藏
                 摘要: 下列語(yǔ)句部分是Mssql語(yǔ)句,不可以在access中使用。 SQL分類(lèi):  DDL—數(shù)據(jù)定義語(yǔ)言(CREATE,ALTER,DROP,DECLARE)  DML—數(shù)據(jù)操縱語(yǔ)言(SELECT,DELETE,UPDATE,INSERT)  DCL—數(shù)據(jù)控制語(yǔ)言(GRANT,REVOKE,COMMIT,ROLLBACK) 首...  閱讀全文
            posted @ 2008-09-18 17:47 黑色天使 閱讀(126) | 評(píng)論 (0)編輯 收藏
                 摘要: int CWnd::RunModalLoop(DWORD dwFlags){ ASSERT(::IsWindow(m_hWnd)); // window must be created ASSERT(!(m_nFlags & WF_MODALLOOP)); // ...  閱讀全文
            posted @ 2008-09-02 23:16 黑色天使 閱讀(651) | 評(píng)論 (0)編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-08-31 01:03 黑色天使| 編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-08-26 14:05 黑色天使 閱讀(2361) | 評(píng)論 (0)編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-08-23 12:22 黑色天使 閱讀(430) | 評(píng)論 (0)編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-08-23 12:18 黑色天使 閱讀(597) | 評(píng)論 (0)編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-08-23 01:42 黑色天使 閱讀(380) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共5頁(yè): 1 2 3 4 5 

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            常用鏈接

            留言簿(2)

            隨筆分類(lèi)

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久天天躁狠狠躁夜夜不卡 | 99久久人妻无码精品系列| 久久婷婷五月综合成人D啪| 亚洲精品综合久久| 18禁黄久久久AAA片| 一极黄色视频久久网站| 亚洲国产精品久久电影欧美| 久久久无码一区二区三区| 久久九九全国免费| 久久国产亚洲精品| 国产精品久久久久9999| 久久99精品国产99久久6| 国内高清久久久久久| 99久久精品费精品国产一区二区| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 色噜噜狠狠先锋影音久久| 亚洲性久久久影院| 久久婷婷国产综合精品| 久久久99精品成人片中文字幕| 中文字幕人妻色偷偷久久| 99久久精品国产综合一区| 少妇久久久久久久久久| 日韩欧美亚洲综合久久影院Ds | 国产精品成人无码久久久久久| 久久久精品视频免费观看| 久久精品无码一区二区无码| 国内精品久久久久影院网站| 久久综合九色综合网站| 热RE99久久精品国产66热| 久久91精品国产91久久户| 2021国产精品久久精品| 精品无码人妻久久久久久| 国产精品欧美久久久天天影视| 久久人妻AV中文字幕| 国内精品免费久久影院| 久久综合九色综合97_久久久| 国产亚洲精久久久久久无码77777| 国产精品gz久久久| 国产成人精品久久亚洲| 久久电影网2021| 久久99国产精一区二区三区|