• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            關(guān)于更好的編程風(fēng)格的建議

            在這篇文章里我將談?wù)劯鞣N層次的C++程序員經(jīng)常問及的四個問題。例如我很驚訝地發(fā)現(xiàn)還有很多程序員沒有意識到標(biāo)準(zhǔn)頭文件擴展名.h的爭議,命名空間的恰當(dāng)用法以及引用臨時對象的規(guī)則。這些問題及其它將在這里進行討論。

            首先我們從解釋受非議的“XXX.h”頭文件名與現(xiàn)代、符合標(biāo)準(zhǔn)的“<XXX>”頭文件名記號之間的區(qū)別開始。接下來我們探索C++不為人知的角落,由于編譯器的局限性和關(guān)聯(lián)語言規(guī)則某些隱蔽的自然特性迷惑了許多程序員,比如逗號分隔表達(dá)式的意義與引用型變量的規(guī)則。最后我們將學(xué)習(xí)如何在程序啟動前啟動一個函數(shù)。

             

            話題1“iostream.h” or “iostream”?

            C++程序員還在使用“iostream.h”代替新的符合標(biāo)準(zhǔn)的“iostream”庫。兩者有什么區(qū)別呢?首先,標(biāo)準(zhǔn)頭文件“.h”擴展名在五年前就倍受爭議。在新代碼中使用有爭議的(過時的)特性永遠(yuǎn)都不是一個好主意。從本質(zhì)上看,“iostream”包括一系列支持窄字符與寬字符的模板化(templatized I/O輸入輸出類,而相反地,“iostream.h”只支持字符流。第三,iostream接口的標(biāo)準(zhǔn)C++規(guī)范在許多細(xì)節(jié)方面進行了變動。因此,“iostream”的接口與實現(xiàn)同那些“iostream.h”是有區(qū)別的。最后,“iostream”是在std命名空間中定義的而“iostream.h”則是全局的。

            由于這些本質(zhì)方面的不同,不能在同一程序中混合使用這兩種庫。作為一個規(guī)則,應(yīng)盡量使用“iostream”,除非你要處理的是只能與“iostream.h”兼容的遺留代碼。

             

            話題2:將引用與右值綁定

            右值和左值是C++編程的一個基本概念。本質(zhì)上來講右值是一個不可能出現(xiàn)在等號左邊的表達(dá)式。相反,左值引用一個對象(廣義范圍上的),或者一塊可讀寫的內(nèi)存。引用既可以指向右值也可以指向左值。然而,由于語言在處理右值上的限制,你也得在將引用指向右值是慎重考慮。

            將引用與右值綁定像引用常量一樣也是被允許的。這條原則背后的原理是很顯而易見的:你無法改變右值,因為對常量的引用確保程序不會通過這個接口改變右值。下面的例子,f()函數(shù)包含一個對常整型變量的引用。

            1 void f(const int & i);
            2 
            3 int main()
            4 {
            5 f(2); /* OK */
            6 }

            這段代碼將右值2”做為函數(shù)f()的一個參數(shù)。代碼運行時,C++將創(chuàng)建一個值為2的臨時整型變量并將其與引用類型i綁定。這個臨時對象與它的接口將在 f()運行期間一直存到直到函數(shù)f返回。函數(shù)f返回后它們立即被釋放。注意我們沒有將i聲明為常量類型,但是函數(shù)f仍有可能修改它的這個參數(shù),這將引起異常。因此最好是將引用與常量類型綁定。

            同樣的規(guī)則適用于自定義類型。只有一個臨時對象為常量時才可以與引用類型綁定。
            struct A{};

            1 void f(const A& a);
            2 
            3 int main()
            4 {
            5     f(A()); /* OK, binding a temporary A to a const reference*/
            6 }

             

            話題3:逗號表達(dá)式

            逗號表達(dá)式是從C語言沿襲下來的。它就像你經(jīng)常使用的for循環(huán)與while-loop循環(huán)一樣。但是這里面的語法規(guī)則遠(yuǎn)不像看起來的那樣。首先,讓我們看看什么是逗號表達(dá)式。

            一個表達(dá)式可以被逗號分隔為一個或若干個子表達(dá)式。例如:

            1     if(++x, --y, cin.good()) /*three expressions*/

            這條if語句被逗號分事為三個表達(dá)式。從C++的角度每個表達(dá)式都是合法的但是副作用產(chǎn)生了。整個逗號表達(dá)式的值是由最右邊的表達(dá)式?jīng)Q定的。于是只有con.good()的返回值是true時整個表達(dá)式的值才是true。這里有另一個關(guān)于逗號表達(dá)式的例子。

            1 int j=10;
            2 int i=0;
            3 
            4 while( ++i, --j)
            5 {
            6     /*..repeat as long as j is not 0*/
            7 }

                 

            話題4:在程序啟動前調(diào)用函數(shù)

            有些應(yīng)用需要在主程序啟運前運行啟動函數(shù)。例如投票、支付和登錄函數(shù)必須在實際種程序啟動前運行。一個最簡單的實現(xiàn)方法就是在一個全局對象的構(gòu)造函數(shù)里調(diào)用這些函數(shù)。因為全局對象在程序的最開頭被隱式的創(chuàng)建,這些函數(shù)就可以在main()函數(shù)之前得到運行。例如:

            1 class Logger
            2 {
            3 public:
            4     Logger()
            5     {
            6         activate_log();
            7     }
            8 };
            9 
            10 Logger log; /*global instance*/
            11 
            12 int main()
            13 {
            14     record * prec=read_log();
            15     //.. application code
            16 }

            全局對象logmain()函數(shù)啟動之前被創(chuàng)建。在它的構(gòu)造函數(shù)里,log調(diào)用了active_log()函數(shù)。于是,當(dāng)main()函數(shù)啟動時,它可以從日志文件中讀取數(shù)據(jù)。

            posted on 2008-09-17 11:03 肥仔 閱讀(180) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)

            精品国产乱码久久久久久浪潮| 77777亚洲午夜久久多喷| 久久WWW免费人成一看片| 国产精品九九久久免费视频 | 国产亚洲色婷婷久久99精品91| 亚洲综合精品香蕉久久网| 久久久久久国产精品美女| 久久精品桃花综合| 久久精品无码一区二区WWW| 久久这里的只有是精品23| 色综合久久天天综线观看| 亚洲国产成人乱码精品女人久久久不卡 | 久久久久99精品成人片欧美| 99久久国产亚洲综合精品| 久久亚洲国产最新网站| 97久久国产综合精品女不卡| 亚洲精品蜜桃久久久久久| 久久精品国产亚洲AV无码娇色 | 国产精品久久网| 久久综合九色综合精品| 久久本道综合久久伊人| 三级片免费观看久久| 久久狠狠爱亚洲综合影院| 久久w5ww成w人免费| 日韩精品国产自在久久现线拍 | 久久久亚洲欧洲日产国码是AV | 久久久久久久99精品免费观看| 91秦先生久久久久久久| 欧美粉嫩小泬久久久久久久 | 国产成人无码精品久久久久免费 | 亚洲精品美女久久777777| 久久国产精品国产自线拍免费| 久久99精品免费一区二区| 99久久99久久精品国产片果冻| 99久久超碰中文字幕伊人| 久久精品一区二区三区中文字幕| 久久狠狠爱亚洲综合影院| 国产精品18久久久久久vr| 久久人人爽人人爽人人片av麻烦 | 日产精品久久久一区二区| 很黄很污的网站久久mimi色|