c++類中的常量


定義屬於這個類范圍的常量

class test
{
private:
    enum {Months = 12};
};

  這種聲明枚舉不會創建類數據成員,這里枚舉只是為了創建類數據成員,因此不用提供枚舉名。類似上面的例子還有ios_base::fixed等。

擴充:c++11作用域內的枚舉

enum egg {Small, Medium, Large, Jumbo};
enum t_shirt {Small, Medium, Large, Xlarge};

  編譯器提示重復定義SmallMediumLargeJumbo。因為egg Small和t_shirt Small位於相同的作用域內。
  c++11提供了一種新的枚舉,它的作用域為類。可以使用關鍵字class或者struct

enum class egg {Small, Medium, Large, Jumbo};
enum class t_shirt {Small, Medium, Large, Xlarge};
egg choice = egg::Large;
t_shirt Floyd = t_shirt::Large;

const常量

class test
{
private:
    const int n;
public:
    test():n(100){}
}

  類的聲明只是聲明了類的形式,並沒有創建對象,因此,在創建對象前,將沒有用於儲存值的空間。

c++98與c++11的區別
  在C++98標准里,只有static const聲明的整型成員能在類內部初始化,並且初始化值必須是常量表達式。這些限制確保了初始化操作可以在編譯時期進行。

class X {
    static const int m1 = 7;   // 正確
    const int m2 = 7;    // 錯誤:無static
    static int m3 = 7;              // 錯誤:無const
    static const string m5 = “odd”; //錯誤:非整型
};

  C++11的基本思想是,允許非靜態(non-static)數據成員在其聲明處(在其所屬類內部)進行初始化。這樣,在運行時,需要初始值時構造函數可以使用這個初始值。現在,我們可以這么寫:

class A {
public:
    int a = 7;
};
//它等同於使用初始化列表:
class A {
public:
    int a;
    A() : a(7) {}
};

  c++11這樣的好處就是當構造函數需要多個初始化時就會變得很簡潔。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM