2016-03-29 62 views
8

是這些成員變量之間的區別:C++中的static const vs constexpr成員字段11/14?

struct my_class { 
    static const int i = 0; 
    static constexpr int j = 0; 
}; 

如果我的理解是正確的,我能同時使用ij的編譯時間常數。也就是說,std::array<int, my_class::i>std::array<int,my_class::j>都應該有效。

+5

([\'constexpr \'和\'常量\'之間的不同]的可能的複製http://stackoverflow.com/questions/14116003/difference-between-constexpr-and-const ) –

+0

讀完這個問題後,我仍然無法找出我的問題的答案:-) – amin

+0

@HumamHelfawi我想知道當constexpr是靜態時它有什麼不同。這有點不同。 – amin

回答

7

積分或枚舉類型的成員沒有區別(如你的例子)。對於所有其他類型,常量表達式require constexpr

左值到右值,除非它被施加到

  • 整型或枚舉類型的非易失性glvalue引用轉換(4.1)完成初始化爲 的非易失性常量對象,使用常量表達式進行初始化,或者使用非易失性glvalue指示使用constexpr定義的非易失性對象,或者指不可變或者這樣的 的子對象[...]
相關問題