欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++中CONST用法總結(推薦)

 更新時間:2017年07月07日 14:23:49   作者:浩渣  
這篇文章主要介紹了C/C++中CONST用法總結(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友參考下吧

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成員函數(shù)都不能調用該對象,因為任何非const成員函數(shù)都會有修改成員變量的可能。

class TEMP{
    void func1();
    void func2() const;
  }
  const TEMP temp;
  temp.func1(); //錯誤;
  temp.func2(); //正確;

4、const修飾成員變量:

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

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

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

5、const修飾類的成員函數(shù)

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

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

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

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

6、const在函數(shù)聲明中的使用:

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

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

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

7、const常量與define宏定義的區(qū)別:

  1)處理階段不同:

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

  const常量在編譯階段使用。

  2)類型和安全檢查不同

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

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

  3)存儲方式不同

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

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

8、mutable關鍵字:

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

class ST { 
    public:
    int a; 
    mutable int showCount; 
    void Show()const; 
  };
  void ST::Show()const{ 
    //a=1;//錯誤,不能在const成員函數(shù)中修改普通變量 
    showCount++;//正確 
  }

  mutable只能修飾非靜態(tài)數(shù)據(jù)成員;

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可被施加于任何作用域內的對象、函數(shù)參數(shù)、函數(shù)返回類型、成員函數(shù)本體;

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

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

以上所述是小編給大家介紹的C/C++中CONST用法總結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • 淺析C++宏定義里#和##的使用

    淺析C++宏定義里#和##的使用

    工作中如果是c開發(fā)的話,經(jīng)常會用到宏定義,而宏定義中的#和##也會時不時遇到,本文主要就來和大家分享一下這兩個符號的作用,需要的可以參考一下
    2023-05-05
  • c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C 語言基礎教程(我的C之旅開始了)[八]

    C 語言基礎教程(我的C之旅開始了)[八]

    C 語言基礎教程(我的C之旅開始了)[八]...
    2007-02-02
  • C++實現(xiàn)LeetCode(24.成對交換節(jié)點)

    C++實現(xiàn)LeetCode(24.成對交換節(jié)點)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(24.成對交換節(jié)點),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作

    使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作

    這篇文章給大家介紹了使用C/C++讀取matlab中.mat格式數(shù)據(jù)的操作,文中通過圖文結合的方式介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • 使用C++程序獲取新浪行情數(shù)據(jù)的方法

    使用C++程序獲取新浪行情數(shù)據(jù)的方法

    這篇文章介紹了在一定的周期范圍內去抓取新浪中行情數(shù)據(jù),通過更新數(shù)據(jù)來緩解構造模擬數(shù)據(jù)與真實數(shù)據(jù)差異性,感興趣的朋友可以了解一下
    2015-07-07
  • c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別

    c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別

    這篇文章主要介紹了c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別,需要的朋友可以參考下
    2014-07-07
  • 關于C++中sort()函數(shù)的用法,你搞明白了沒

    關于C++中sort()函數(shù)的用法,你搞明白了沒

    這篇文章主要介紹了關于C++中sort()函數(shù)的用法,并通過三種方法介紹了按降序排列的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • C++中的字符串(1)

    C++中的字符串(1)

    這篇文章主要簡單介紹C++中的字符串,字符串就是連續(xù)的一連串字符,在C++當中, 處理字符串的方式有兩種類型。一種來自于C語言,也被稱為C風格字符串。另外一種是基于string類庫,下面來看文章學校內容
    2021-11-11
  • C語言實現(xiàn)班級檔案管理系統(tǒng)課程設計

    C語言實現(xiàn)班級檔案管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)班級檔案管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論