中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++?const的使用方法有哪些

發布時間:2023-05-05 17:05:58 來源:億速云 閱讀:121 作者:iii 欄目:開發技術

這篇文章主要介紹“C++ const的使用方法有哪些”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++ const的使用方法有哪些”文章能幫助大家解決問題。

    const的基本概念:

    const名叫常量限定符,用來限定特定變量,以通知編譯器該變量是不可修改的。習慣性的使用const,可以避免在函數中對某些不應修改的變量造成可能的改動。

    下面我就const的用法來談談:

    const的用法大致可分為以下幾個方面:

    (1)const修飾基本數據類型

    (2)const應用到函數中

    (3)const在類中的用法

    (4)const修飾類對象,定義常量對象 

    一、const修飾基本數據類型 

    1.const修飾一般常量及數組  

      const int a=10;               等價的書寫方式:     int const a=10;
              const int arr[3]={1,2,3};                        int const arr[3]={1,2,3};

    對于類似這些基本數據類型,修飾符const可以用在類型說明符前,也可以用在類型說明符后,其結果是一樣的。在使用這些常量的時候,只要不改變這些常量的值便好。  

    2.const修飾指針變量*及引用變量&         

    介紹本部分內容之前,先說說指針和引用的一些基本知識。

    指針(pointer)是用來指向實際內存地址的變量,一般來說,指針是整型,而且一般的大家會接受十六進制的輸出格式。
    引用(reference)是其相應變量的別名,用于向函數提供直接訪問參數(而不是參數的副本)的途徑,與指針相比,引用是一種受限制的指針類型,或者說是指針的一個子集,而從其功能上來看,似乎可以說引用是指針功能的一種高層實現。

    關于運算符&和*:
    在C++里,沿襲C中的語法,有兩個一元運算符用于指針操作:&和*。按照本來的定義,&應當是取址符,*是指針符,也就是說, &用于返回變量的實際地址,*用于返回地址所指向的變量,他們應當互為逆運算。實際的情況也是如此。

    在定義變量的引用的時候,&只是個定義引用的標志,不代表取地址。

    舉例:  

     #include<iostream.h>
      void main()
     {
          int a;  //a is an integer
          int *aPtr;  //aPtr is a pointer to an integer
      
         a=7;
         aPtr = &a;
         cout<<"Showing that * and & are inverses of "<<"each other.\n";
         cout<<"a="<<a<<"  *aPtr="<<*aPtr<<"\n";
         cout<<"&*aPtr = "<<&*aPtr<<endl;
         cout<<"*&aPtr = "<<*&aPtr <<endl;
     }

    運行結果: 

    C++?const的使用方法有哪些

    了解完指針和應用的基本概念之后,下面繼續我們的話題。

    const修飾指針(*):

    const int* a = & [1]          //非常量數據的常量指針    指針常量
    int const *a = & [2]          //非常量數據的常量指針     a is a pointer to the constant char variable
    int* const a = & [3]          //常量數據的非常量指針指針常量 常量指針 a is a constant pointer to the (non-constant) char variable
    const int* const a = & [4]    //常量數據的常量指針

    可以參考《Effective c++》Item21上的做法,

    如果const位于星號*的左側,則const就是用來修飾指針所指向的變量,即指針指向為常量;

    如果const位于星號的右側,const就是修飾指針本身,即指針本身是常量。

    因此,[1]和[2]的情況相同,都是指針所指向的內容為常量,這種情況下不允許對內容進行更改操作,如不能*a = 3 ;

    [3]為指針本身是常量,而指針所指向的內容不是常量,這種情況下不能對指針本身進行更改操作,如a++是錯誤的;

    [4]為指針本身和指向的內容均為常量。   

    const修飾引用(&):

     int const &a=x;
       const int &a=x;
       int &const a=x;//這種方式定義是C、C++編譯器未定義,雖然不會報錯,但是該句效果和int &a一樣。

    這兩種定義方式是等價的,此時的引用a不能被更新。如:a++ 這是錯誤的。   

    二、const應用到函數中  

    1.作為參數的const修飾符

    2.作為函數返回值的const修飾符  

    其實,不論是參數還是返回值,道理都是一樣的,參數傳入時候和函數返回的時候,初始化const變量
    1修飾參數的const,如 void fun0(const A* a ); void fun1(const A& a);
     調用函數的時候,用相應的變量初始化const常量,則在函數體中,按照const所修飾的部分進行常量化,如形參為const A* a,

    則不能對傳遞進來的指針的內容     進行改變,保護了原指針所指向的內容;如形參為const A& a,則不能對傳遞進來的引用對象進行改變,

    保護了原對象的屬性。
    [注意]:參數const通常用于參數為指針或引用的情況; 
    2修飾返回值的const,如const A fun2( ); const A* fun3( );
    這樣聲明了返回值后,const按照"修飾原則"進行修飾,起到相應的保護作用。

    const Rational operator*(const Rational& lhs, const Rational& rhs)
    {
    return Rational(lhs.numerator() * rhs.numerator(),
    lhs.denominator() * rhs.denominator());
    }

    返回值用const修飾可以防止允許這樣的操作發生:

    Rational a,b;
    Radional c;
    (a*b) = c;

    一般用const修飾返回值為對象本身(非引用和指針)的情況多用于二目操作符重載函數并產生新對象的時候。

    類中的成員函數:A fun4()const; 其意義上是不能修改所在類的的任何變量。 

    三、類中定義常量(const的特殊用法) 

    在類中實現常量的定義大致有這么幾種方式實現: 

    1.使用枚舉類型 

    class test
    {
         enum { SIZE1 = 10, SIZE2 = 20}; // 枚舉常量
         int array1[SIZE1];  
         int array2[SIZE2];
    };

    2.使用const 

    不能在類聲明中初始化const數據成員。以下用法是錯誤的,因為類的對象未被創建時,編譯器不知道SIZE的值是什么。 

      class test
      {
            const int SIZE = 100;     // 錯誤,企圖在類聲明中初始化const數據成員
            int array[SIZE];          // 錯誤,未知的SIZE
      };

    正確的使用const實現方法為:const數據成員的初始化只能在類構造函數的初始化表中進行。 

    class A
     {…
            A(int size);      // 構造函數
            const int SIZE ; 
     };
     A::A(int size) : SIZE(size)    // 構造函數的初始化表
    {
          …
    }
    //error 賦值的方式是不行的
    A::A(int size)
    {
         SIZE=size;
    }
    void main()
    {
        A  a(100); // 對象 a 的SIZE值為100
        A  b(200); // 對象 b 的SIZE值為200
    }

    注意:對const成員變量的初始化,不能在變量聲明的地方,必須在類的構造函數的初始化列表中完成,即使是在構造函數內部賦值也是不行的。

    具體原因請參見 【初始化列表和賦值的區別】 

    3.使用static const 

    通過結合靜態變量來實現:

    #include<iostream.h> 
    class Year
    { 
    private:
     int y; 
    public:
     static int const Inity;
    public: 
     Year()
     {
      y=Inity;
     }
     };
    int const Year::Inity=1997;//靜態變量的賦值方法,注意必須放在類外定義
    void main()
    {
     cout<<Year.Inity<<endl;//注意調用方式,這里是用類名調用的。
    }

    到這里就把在類中定義常量的方法都陳列出來了。 

    四、const定義常量對象,以及常量對象的用法

    class test
    {
    public:
        test():x(1)
        {
            y=2;
        }
        ~test()
        {}
        void set(int yy)
        {
            y=yy;
        }
        int getx() const
        {
            return x;
        }
    //protected:
        const int x;
        int y;
    };
    void main()
    {
     const test t;
     t.set(33);//error
     t.getx();
    }

    常量對象只能調用常量函數,別的成員函數都不能調用。 

    五、使用const的一些建議  

    <1>要大膽的使用const,這將給你帶來無盡的益處,但前提是你必須搞清楚原委;
    <2> 要避免最一般的賦值操作錯誤,如將const變量賦值,具體可見思考題;
    <3> 在參數中使用const應該使用引用或指針,而不是一般的對象實例,原因同上;
    <4> const在成員函數中的三種用法(參數、返回值、函數)要很好的使用;
    <5>不要輕易的將函數的返回值類型定為const;
    <6>除了重載操作符外一般不要將返回值類型定為對某個對象的const引用。

    關于“C++ const的使用方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    肇东市| 柳州市| 剑河县| 兴文县| 佛山市| 赞皇县| 文山县| 岑溪市| 布拖县| 长寿区| 都昌县| 永修县| 渭南市| 宣城市| 龙江县| 乃东县| 庆云县| 拜城县| 五华县| 凌源市| 湛江市| 伽师县| 崇阳县| 明星| 高安市| 德格县| 乐亭县| 公主岭市| 云阳县| 元江| 灵寿县| 台北县| 方正县| 本溪市| 固始县| 南阳市| 仁化县| 靖安县| 二连浩特市| 安远县| 鹤岗市|