2017年計算機等級考試二級C++輔導:C++編譯期間類中的常量

字號:


    問題:在類中建立一個int類型的數(shù)組
    方法一:(錯誤)
    class Test
    {
    const int size = 100;
    int array[size];
    //……
    };
    錯誤原因:
    1:因為在一個類中,const恢復了它在c中的一部分意思,在每個類對象里分配存儲并代表一個值,這個值一旦被初始化以后就不能被改變。所以在類中使用了const的意思是:在這個對象的生命周期內(nèi),它是一個常量。
    然而,每個對象可能包含不同的值。
    2:對const常量進行了初始化,C++中這個初始化必須由構造函數(shù)完成,如const常量在初始化列表中進行初始化。
    方法二:(正確,有缺陷)
    使用enum;
    class Test
    {
    enum { size = 100};
    int array[size];
    //……
    };
    使用enum不會占用對象中的存儲空間的,枚舉常量在編譯的時候被全部求值。
    缺點:
    假如定義一個非整型的常量該如何?enum無法完成此項操作,同時喪失了枚舉本來的作用。
    方法三:(正確,)
    使用靜態(tài)常量;
    class Test
    {
    static const int size;
    int array[size];
    //……
    };
    const int Test::size = 100;
    它既是常量,不能改變,又是靜態(tài),在類中只有一個定義點。所以能夠完成任務。
    同時,它可以定義任何與定義類型的常量。