天天看點

聚合類,字面值類型,constexpr函數

聚合類

聚合類使得使用者可以直接通路其成員,當一個類滿足如下條件時,我們說它是聚合的:

  • 所有成員都是public的。
  • 沒有定義任何構造函數
  • 沒有類内初始值
  • 沒有基類,也沒有virtual函數。

例如:下面的類是一個聚合類:

struct Data{
    int ival;
    string s;
};
           

字面值類型

字面值類型包括:算數類型(char , bool , int 等等),引用和指針,以及字面值常量類。自定義類Sales_item、IO庫、string類型則不屬于字面值類型。

constexpr函數

constexpr函數是指能用于常量表達式的函數。定義constexpr函數的方法和其他函數類似,不過要遵循幾項約定:函數的傳回類型及所有形參都是字面值類型,而且函數中必須有且隻有一條return語句:

constexpr int new_size()
{ 
    return ; 
}
constexpr int foo = new_sz(); //正确:foo是一個常量表達式
           

我們把new_sz定義成無參數的constexpr函數。因為編譯器能在程式編譯時驗證new_sz函數傳回的是常量表達式,是以可以用new_sz函數初始化constexpr類型的變量foo。

執行該初始化任務時,編譯器把對constexpr函數的調用替換成其結果值。為了能在編譯過程中随時展開,constexpr函數被隐式地指定為内聯函數。

參考:C++primer第五版