• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • const關鍵字

    發表于:2007-05-25來源:作者:點擊數: 標簽:好像Const不是關鍵字一個
    const好像遠不是一個常量那么簡單,迷糊阿 //------------------------------------------------------------------------------ const long thevalue = 1234; //這就是死木頭一根了,作用就是你如果在后面的代碼里面給thevalue賦值,編譯器會告訴你錯誤的;

    const好像遠不是一個常量那么簡單,迷糊阿

    //------------------------------------------------------------------------------

    const long thevalue = 1234;   //這就是死木頭一根了,作用就是你如果在后面的代碼里面給thevalue賦值,編譯器會告訴你錯誤的;

    ----------------------------------------------------------

    thevalue = 2345;   // error C2166: l-value specifies const object 如果試圖賦值, 這是vc給出的錯誤;

    ----------------------------------------------------------

    long * p = &thevalue; //error C2440: 'initializing' : cannot convert from 'const long *' to 'long *'  Conversion loses qualifiers

                                    //試圖用一個普通指針指向常量,不行;

    -----------------------------------------------------------

    const long * p = &thevalue; //編譯正常;

    *p = 2345;  //error C2166: l-value specifies const object 如果又試圖賦值,還是錯誤,因為指向的是常量啊,編譯器知道,騙不過;

    ----------------------------------------------------------

     long * p =(long *) &thevalue; //編譯正常;

    *p = 2345;  //編譯正常;

    cout<

    ----------------------------------------------------------

    記得看過什么地方說原來在C里面常量一般用

    #define XXX_XXX_XXXX xx 這樣來用,在預編譯的時候處理掉;

    好像怎么著了不如c++的const爽,大概就因為c++類型檢查嚴格吧;

    const還有比較特殊的地方就是運用到類里面;

    class CA{ 

        long thevalue;

    public:

        const long thevalue1;

        void set_value(long val);

        const char * con_func();  //返回值是常量

        long  con_func1() const;  //const 成員函數

        void  con_func2(const char * in_str);  //使用const 參數

       CA();

       ~CA();

    };

    void CA::set_value(long val){

        thevalue = val;

    }

    //----------------------------------------------------------

    const char * CA::con_func(){
     
     return some address;
    }

    被函數返回的地址是不可以被修改的; 大概c++編譯器認為 char* 和const char* 根本不是一種類型;

    CA ca;

    char * p = ca.confunc();  //所以這里編譯不通過;

    const * p = ca.confunc();  //編譯通過;

    ============

    如果有這樣個函數  const long CA::con_func_value() 直接返回數值而不是地址或引用,那么,據說這樣沒有意義;

    因為,返回值僅僅是一份臨時拷貝,返回之后保存該值的臨時對象就消失了,也沒有誰有機會去修改它;

    如果函數返回一個引用,據說不常見 ;

    CA & operate = (const CA &other); 賦值函數是這樣子的,好像沒什么別的地方用引用返回了;

    如果變成這樣 const CA & operate = (const CA &other); 會影響連續賦值

    CA a,b,c;

    a=b=c; //這個正常

    (a=b)=c; //這個出錯,為啥我沒理解透,誰給說說;

    //----------------------------------------------------------

    long CA::con_func1() const{

     return 13;
    }

    const成員函數就是不能修改成員數據的函數;如果實現這樣

    long CA::con_func1() const{

    thevalue = 2345;// error C2166: l-value specifies const object 這錯誤又來了;在這個函數內部所有數據成員都變成const的了;

    set_value(2345);// 這個也不行,調用非const函數照樣出錯;const函數里只能調const函數

                            // error C2662: 'set_value' : cannot convert 'this' pointer from 'const class CA' to 'class CA &' Conversion loses qualifiers

                            //通過這個錯誤,可以看出來編譯器對const函數所傳遞的this指針是個 'const class CA'

     return 13;
    }

    //----------------------------------------------------------

    void CA::con_func2(const char * in_str)

    const類型的參數就很好理解了,就是函數內部不能修改參數的值,這只對指針和引用有效,對值傳遞意義不大;

    值傳遞的話函數內部看到的只是一份拷貝而已,你愛改就改唄,反正對外面沒影響;

    另外就是只能對輸入參數用const,對輸出參數用了const就.......進去啥還出來啥,還調函數干啥....

    剛弄出來就發現還有個gg寫的const辨析很好,

    在這里 http://blog.chinaunix.com/article.php?articleId=44267&blogId=9573

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>