常引用,const CString&,引用的效率

    C++的興起,給一些形而上學或者一知半解的僞面向對象程序員,提供了諸多口實。致使他們在日常的編程中,瘋狂的使用對象,常使我不寒而慄。上帝要毀滅一個人之前,總是先讓他瘋狂。

    C++中,琳琅滿目的書籍,也不遺餘力的如此吹捧。可是事實證明,到目前爲止,我們國家還沒有任何一位高人寫出任何一本令我歎爲觀止的C++教程,我不得不感慨萬分。顯然,每個接受C++面向對象思想的人,都應該清楚,所謂面向對象,絕對不是要面向一個矮胖的數據塊,而是要用抽象的思維去建立一個幾乎能夠媲美現實世界的程序架構。

    我們還是回到問題的本身。

    對於函數中參數的傳遞來說,我確定一定以及肯定地認爲,只要你無意使傳入對象返回任何結果,你就應該將它聲明爲常引用。

    什麼叫常引用?很多人的腦袋開始像飢腸轆轆的肚子一樣,嘰嘰咕咕的叫起來。

    還是得先看看引用吧。

    C++決定,任何人,任何時候,可以給一個已知的對象(或者變量)再起一個名字----這就是引用。表達式可以是這樣:

        int  i = 9;
        int&  ii = i;
        CString  str(“idealsoft”);
        CString&  strAlias = str;


    經常猶抱琵琶半遮面的引用,爲它的粗心付出了代價。那個取地址的操作符“&”,很不情願的站在了別名(alias)的左邊,雖然它的心還在右邊,雖然它還是在取用右邊人物的地址,是的,是這樣的,這就是引用,實質上就是將一個現有的地址賦給另外一個常地址。

    我們都知道引用是不能再次賦值的,這符合const變量的特徵,它被來自原變量的地址初始化。其實,就像它一樣:

       char* const p = “idealsoft”;

    一個內容可以改變,而自身無法改變的指針,給了我們另外的一個神祕而詭異的名字,它就是傳說中的引用。好,我們把它再加上一個const,讓它的內容也不能被改變:

       const char* const p = “idealsoft”;

    這是什麼妖怪?我曾經似乎在以前的const詳解裏邊說過,這種指針在編程的時候基本上沒有用武之地。那它到底是什麼?其實,它就是一個常引用,就像是水中的月亮,你只能看,卻永遠也別指望碰到它。

    好,我們就來看看水中的月亮。

       Print(const CString& str) //驕傲的水中之月
       {
           printf(“I’m just %s\n”, str); //曾經我問過,爲什麼printf能夠打印CString?
      }

      ……

      int main()
      {
          CString str(“idealsoft”);
          Print(str);
      }


    我們爲什麼要用常引用?而不直接用C++“標榜”的對象,或者其它?顯然,我們已經知道引用就相當於一個不可變的指針,在參數傳遞的時候,完全不必將整個對象壓棧,而僅需壓入一個指針,你可以想象一個充斥着一望無垠對象的程序,它的效率將會怎樣的不堪入目。常引用則同時避免了,我們的參數被惡意的篡改。

    打印之後,水中之月依然冷豔而一塵不染,在以後的日子裏,想必,你也會像我一樣,立即決定非她不娶並決定和她廝守終身。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章