<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>
            C語言

            c++中const關鍵字

            時間:2025-01-25 11:33:51 C語言 我要投稿
            • 相關推薦

            c++中const關鍵字

              const是一個C++語言的限定符,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。下面是小編分享的c++中const關鍵字,一起來看一下吧。


              define與const的區別

              1.define作用在預處理時,是簡單地字符替換

              2. const作用在編譯時,具有類型檢查的功能

              3. const必須進行初始化

              常量指針與指針常量

              #include <iostream>

              using std::endl;

              using std::cout;

              int main()

              {

              int a = 100;

              const int *pa = &a;

              int * const pb = &a;

              return 0;

              }

              小結:

              const int *pa = &a;-->常量指針

              可以改變指針指向,不能改變所指變量的值。

              int * const pb = &a;

              不能改變指針指向,可以改變所指變量的值。

              C/C++中CONST用法總結

              1、修飾常量時:

              const int temp1; //temp1為常量,不可變

              int const temp2; //temp2為常量,不可變

              2、修飾指針時:

              主要看const在*的前后,在前則指針指向的內容為常量,在后則指針本身為常量;

              const int *ptr;  //*ptr為常量;

              int const *ptr;  //*ptr為常量;

              int* const ptr;  //ptr為常量;

              const int * const ptr;  //*ptr、ptr均為常量;

              3、const修飾類對象時:

              const修飾類對象時,其對象中的任何成員都不能被修改。const修飾的對象,該對象的任何非const成員函數都不能調用該對象,因為任何非const成員函數都會有修改成員變量的可能。

              class TEMP{

              void func1();

              void func2() const;

              }

              const TEMP temp;

              temp.func1(); //錯誤;

              temp.func2(); //正確;

              4、const修飾成員變量:

              const修飾的成員變量不能被修改,同時只能在初始化列表中被初始化,因為常量只能被初始化,不能被賦值;

              賦值是使用新值覆蓋舊值構造函數是先為其開辟空間然后為其賦值,不是初始化;而初始化列表開辟空間和初始化是同時完成的,直接給與一個值,所以const成員變量一定要在初始化列表中完成。

              class TEMP{

              const int val;

              TEMP(int x)val(x){};  //只能在初始化列表中賦值;

              }

              5、const修飾類的成員函數

              const成員函數表示該成員函數不能修改類對象中的任何非const成員變量。一般const寫在函數的后面,形如:void func() const;

              如果某個成員函數不會修改成員變量,那么最好將其聲明為const,因為const成員函數不會對數據進行修改,如果修改,編譯器將會報錯;

              class TEMP{

              void func()const; //常成員函數,不能修改對象中的成員變量,也不能調用類中任何非const成員函數;

              }

              對于const類對象,只能調用類中的const成員函數,所以const修飾成員函數的作用主要就是限制對const對象的使用。

              6、const在函數聲明中的使用:

              在函數聲明中,const可以修飾函數的返回值,也可以修飾具體某一個形參;

              修飾形參時,用相應的變量初始化const常量,在函數體內,按照const所修飾的部分進行常量化;

              修飾函數返回值時,一般情況下,const修飾返回值多用于操作符的重載。通常不建議用const修飾函數的返回值類型為某個對象或某個對象引用的情況;

              7、const常量與define宏定義的區別:

              1)處理階段不同:

              define是在預處理階段,define常量從未被編譯器看見,因為在預處理截斷就已經替換了;

              const常量在編譯階段使用。

              2)類型和安全檢查不同

              define沒有類型,不做任何檢查,僅僅是字符替換,沒有類型安全檢查,并且在字符替換時可能會產生意料不到的錯誤

              const常量有明確的類型,在編譯階段會進行類型檢查;

              3)存儲方式不同

              define是字符替換,有多少地方使用,就會替換多少次,不會分配內存;

              編譯器通常不會為const常量分配空間,只是將它們保存在符號表內,使他們成為一個編譯期間的一個常量,沒有讀取內存的操作,效率也很高;

              8、mutable關鍵字:

              在C++中,mutable是為了突破const的限制而設置的。被mutable修飾的變量,將永遠處于可變的狀態,即使在一個const函數中,甚至結構體變量或者類對象為const,其mutable成員也可以被修改:

              class ST {

              public:

              int a;

              mutable int showCount;

              void Show()const;

              };

              void ST::Show()const{

              //a=1;//錯誤,不能在const成員函數中修改普通變量

              showCount++;//正確

              }

              mutable只能修飾非靜態數據成員;

              9、const_cast:

              用于修改類型的const或volatile屬性。

              用法:

              :const_cast<type_id> (expression)

              該運算符用來修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。

              1)常量指針被轉化成非常量的指針,并且仍然指向原來的對象;

              2)常量引用被轉換成非常量的引用,并且仍然指向原來的對象;

              3)const_cast一般用于修改底指針。如const char *p形式。

              建議:

              1、應該盡可能使用const,它會允許你指定一個語義約束(也就是指定一個不能被改動的對象),而編譯器會強制實施這項約束。它允許你告訴編譯器和其他程序員某值應該保持不變。

              2、將某些東西聲明為const可幫助編譯器偵測出錯誤用法。const可被施加于任何作用域內的對象、函數參數、函數返回類型、成員函數本體;

              3、編譯器強制實施bitwise constness,但你編寫程序時應該使用“概念上的常量性”(conceptual constness);

              4、當const和non_const成員函數有著實質等價的實現時,令non-const版本調用const版本可避免代碼重復;


            【c++中const關鍵字】相關文章:

            C++ 中const和復合類型08-07

            c++ const引用與非const引用09-15

            C語言關鍵字const用法09-06

            C語言關鍵字const的使用09-02

            總結C語言中const關鍵字的使用08-22

            C語言關鍵字:auto、static、register、const08-06

            register關鍵字在c語言和c++中的差異09-23

            C++中const-cast與reinterpret-cast運算符的用法10-22

            C語言中Static和Const關鍵字的作用09-23

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看