C++ 做用域爲類的常量

有時,使符號常量的做用域爲類頗有用:對象

class Bakery
{
private:
    const int Months = 12;    // declare a constant? FALSE
    double costs[Months];
    ...

  但這是行不通的,由於——聲明類只是描述了對象的形式,並無建立對象。所以,在建立對象前,將沒有用於存儲值的空間。blog

解決方案一:

——在類中聲明一個枚舉作用域

class Bakery
{
private:
    enum {Months = 12};
    double costs[Months];
    ...
  • 在類聲明中聲明的枚舉的做用域爲整個類
  • 用這種方式聲明枚舉並不會建立類數據成員。也就是說,全部對象中都不包含枚舉。
  • Months只是一個符號名稱,在做用域爲整個類的代碼中遇到它時,編譯器將用30來替換它

——使用static編譯器

class Bakery
{
private:
    static const int Months = 12;
    double costs[Months];
    ...
  • 這將建立一個名叫Months的常量,該常量將與其它靜態變量存儲在一塊兒,而不是存儲在對象中
  • C++98中,只能使用這種技術聲明值爲整數或枚舉的靜態常量,而不能存儲double常量。C++11消除了這種限制  
相關文章
相關標籤/搜索