C++中特殊變量的初始化方法

1.特殊變量函數

  • 引用(&)      :引用和常引用    
  • 常量(const)
  • 靜態(static) :普通靜態和靜態常量((整數類型(integral types:int、char、bool、)和非整數類型)

2.初始化方法code

  • 常量(const)和引用(&)必須聽過參數列表進行初始化;
  • 靜態成員變量的初始化有些特別,是在類外初始化且不能在帶有 static 關鍵字;
  • 帶有類內初始值設定項的成員必須爲常量且爲integral types;

因此,縱向來看,初始化方式主要有兩種:對象

  • 初始化參數列表:const,引用
  • 類外初始化:static(且再也不帶有 static 關鍵字)
  • 類內初始值設定:const+integral type

橫向來看,不一樣數據類型的初始化方式分別爲:生命週期

  • 引用:初始化參數列表
  • const 
    • 類內初始化值設定(若是爲integral types)
    • 初始化參數列表
  • static: 
    • 類外初始化,且再也不帶有 static 關鍵字
    • 類內初始化設置,必須爲const,且integral
    • 不可經過構造函數的初始化參數列表進行初始化 
      • static 不屬於特定對象,而是屬於類,顯然不能經過構造函數的初始化參數列表進行 static 變量的初始化
class Test
{
public:
    Test():i(1), ri(i), ci(2), cd(0)
    {}
                // 對於通常常量型(非integral type)和引用型成員變量,必須經過初始化參數列表進行初始化
                // 普通成員變量也能夠放在函數體中,但本質已不是初始化,而是一種普通的賦值運算,效率極低
private:
    int i;
                // 普通成員變量
                // 初始化參數列表,函數體
    int& ri;
                // 引用,初始化參數列表
    const int ci;
                // 常量
                // 類內初始值設定
                // 初始化參數列表
    const int& cri;
                // 常引用,初始化參數列表
    const double cd;
                // 常量非integral types
                // 初始化參數列表
    static int si;
                // 靜態很是量
                // 類外,C++11以後的版本也能夠在類內部進行初始化
    static const int sci;
                // 靜態常量(integral type)
                // 類外或者類內直接初始化
    //static const int sci=100;
    static const double scd;
                // 靜態常量(非integral )
                // 類外
};

 

  • 通常常量類型(未被static修飾)、引用類型,在類內部便可實現初始化,在類外實現初始化的一定是static類型(固然一部分的靜態成員,也即同時又是const和integral type的,可在類內初始值設定,這一語法特性並不是爲全部的編譯器所支持,因此一種推薦的作法,便是凡是static類型的,咱們總在類外進行初始化,哪怕它在類內已進行初始值設定,只要在類外初始化時不修改其值):
注意:靜態變量的初始化並無static關鍵字
int Test::si = 0;
const int Test::sci = 1;
const double Test::scd = 99.0;
  • 靜態成員屬於類做用域,但不屬於類對象實例,和普通的static變量同樣,程序一運行就分配內存並初始化,生命週期和程序一致;
  • 靜態成員其實和全局變量的地位是一致的,只不過編譯器把它的使用限制在類做用域內。
  • 常量引用只能調用常量相應對象上的常量方法,不能調用很是量方法。

相關文章
相關標籤/搜索