const在c和c++中的區別

C中的const,功能比較單一,較容易理解:
    做用:    被修飾的內容不可更改。
    使用場合:修飾變量,函數參數,返回值等。(C++中應用場合要豐富的多)
    特色:     是運行時const,所以不能取代#define用於成爲數組長度等須要編譯時常量的狀況。同時由於是運行時const,能夠只定義而不初始化,而在運行時初始化。如 const int iConst;。 另外,在c中,const變量默認是外部連接,所以在不一樣的編譯單元中若是有同名const變量,會引起命名衝突,編譯時報錯。

C++中的const:跟c中比較,內容要豐富不少,固然,做用也更大了
    一、非類成員const
        *在C++中,const變量(在這裏涉及的const都不是類中的const,類中的const專門提出來記錄)默認是 內部鏈接的,所以在不一樣的編譯單元中能夠有同名的const 變量定義。
        *是 編譯時常量,所以能夠像#define同樣使用,並且由於上面一點,能夠在頭文件中定義const變量,包含的不一樣的cpp文件(編譯單元)中使用而不引發命名衝突。
        * 編譯器默認不爲const變量分配內存,除非:
            a、使用 extern 申明,
            b、程序中有引用const 變量的地址。
        *可使用下面的類型轉換(不安全的):
            a、int * = (int *)pConst
            b、int * = const_cast<int*>pConst(C++解const屬性cast)
        *函數參數或者返回值能使用 const & or const * 時,儘可能使用const屬性,加強程序健全性。
        *C++中臨時對象/內置變量默認具備const屬性
    二、類中的const
        * 類中的const與c語言中的const同樣,只是運行時常量,不能做爲數組維數使用,即不能取代#define。在類中使用下面兩種方式取代#define:
            a、static const...、
            b、enum{....}//enum 不佔存儲空間
        *類中的const變量佔用存儲空間
        *類中的const成員變量須要在構造函數初始化列表中初始化
        *const 對象:在該對象生命週期內,必須保證沒有任何成員變量被改變。const對象只能調用const成員函數。
        *const成員函數: void fun() const ... 不只能被const對象調用,也能被非const對象調用,所以,若是確認一個任何成員函數不改變任何成員變量,應該習慣性將該函數定義成const類型。 若是const成員函數須要改變成員變量,有兩種實現方式:
            a、const_cast<class*> this強制取消this指針的const屬性。
            b、將被改變的成員變量定義成 mutable:mutable int i; //應永遠只使用第二種方法,讓任何閱讀程序的人都知道 該變量可能被const函數改變。         *若是一個對象被定義成const,那麼該const對象「可能」會被放入到ROM當中,這在嵌入式開發當中有時很是重要。。。。(不能有任何自定義的constructor 和destructor。它的基類或者成員對象不能有自定義的constructor和destructor,不能有任何mutable成員變量)
相關文章
相關標籤/搜索