C++ 編程規範 1 常量

來源:互聯網
上載者:User

1 常量

不變的值更易於理解、跟蹤和分析,所以應該儘可能地使用常量代替變數,定義值的時候,應該把const

作為預設的選項。

規則1.1 使用const常量取代宏
說明:宏是簡單的文本替換,在預先處理階段時完成,運行報錯時直接報相應的值;跟蹤調試時也是顯

示值,而不是宏名;宏沒有類型檢查,不安全;宏沒有範圍。

樣本:

    #define MAX_MSISDN_LEN (20)  //不好的例子
    const int MAX_MSISDN_LEN = 20; //好的例子

規則1.2 一組相關的整型常量應定義為枚舉

說明:之所以使用枚舉,基於:

枚舉比#define或const int更安全,因為編譯器會檢查參數值是否是否位於枚舉取值範圍內,從

    而避免錯誤發生。

樣本:

    //好的例子:
    enum DayOfWeek{sunday,monday, tuesday, wednesday, thursday, friday, saturday};

    enum Color{black, blue, white, red, purple};

    BOOL ColorizeCalendar(DayOfWeek today, Color todaysColor);
    ColorizeCalendar(blue, sunday); //編譯報錯,Blue和Sunday位置錯誤

    //不好的例子:
    const int sunday = 0;
    const int monday = 1;
    const int black  = 0;
    const int blue  = 1;

    BOOL ColorizeCalendar(int today, int todaysColor);
    ColorizeCalendar(blue, sunday); //不會報錯
當枚舉值需要對應到具體數值時,須在聲明時顯示賦值。否則不需要顯式賦值,以避免重複賦值,

    降低維護(增加、刪除成員)工作量。

樣本:

    //好的例子:S協議裡定義的裝置ID值,用於標識裝置類型
    enum TDeviceType
    {
       DEV_UNKNOWN = -1,
       DEV_DSMP = 0,
       DEV_ISMG = 1,
       DEV_WAPPORTAL = 2
    };
程式內部使用,僅用於分類的情況,不應該進行顯式的賦值。

樣本:

    //好的例子:程式中用來標識工作階段狀態的枚舉定義
    enum TSessionState
    {
       SESSION_STATE_INIT,
       SESSION_STATE_CLOSED,
       SESSION_STATE_WAITING_FOR_RSP
    };
應當盡量避免枚舉值重複,如必須重複也要用已定義的枚舉來修飾,例如:

    typedef enum
    {
       RTCP_SR = 200,
       RTCP_MIN_TYPE = RTCP_SR,      //must be lowest known type
       RTCP_RR   = 201,
       RTCP_SDES  = 202,
       RTCP_BYE  = 203,
       RTCP_APP  = 204,
       RTCP_RTPFB = 205,
       RTCP_PSFB  = 206,
       RTCP_XR  = 207,
       RTCP_RSI = 208,
       RTCP_PUBPORTS = 209,
       RTCP_MAX_TYPE = RTCP_PUBPORTS  //must be highest known type
    } rtcp_type_t;

規則1.3 不相關的常量,即使取值一樣,也必須分別定義

說明:一個常量只用來表示一個特定功能,即一個常量不能有多種用途。

樣本:

    //好的例子:協議A和協議B,手機號(MSISDN)的長度都是20。
    unsigned const int A_MAX_MSISDN_LEN = 20;
    unsigned const int B_MAX_MSISDN_LEN = 20;
    //或者使用不同的名字空間:
    namespace alib
    {
       unsigned const int MAX_MSISDN_LEN = 20;
    }
    namespace blib
    {
       unsigned const int MAX_MSISDN_LEN = 20;
    }

建議1.1 儘可能使用const

說明:在聲明的變數或參數前加上關鍵字const用於指明變數值不可被篡改 。類成員函數加上const

限定符表明該函數不會修改類成員變數的狀態。

使用const常見的情境:

函數參數:傳遞引用時,如果函數不會修改傳入參數, 該形參應聲明為const。

成員函數:訪問函數(如get函數);不修改任何資料成員的函數;未調用非const函數、未返回數

    據成員的非const指標或引用的函數。

資料成員:如果資料成員在物件建構之後不再發生變化, 可將其定義為const。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.