2016-04-03 260 views
3

如果我想將我的default默認構造函數聲明爲constexpr,我會在Clang 3.8和GCC 5.3中得到編譯器錯誤。據this計算器問題,它只是應該很好地工作:constexpr默認構造函數

struct A 
{ 
    constexpr A() = default; 

    int x; 
}; 

但是:

Error: defaulted definition of default constructor is not constexpr 

你有任何線索,什麼是真正回事?

回答

6

就目前而言,x仍未初始化,所以無法在編譯時構造該對象。

需要初始化X:

struct A 
{ 
    constexpr A() = default; 

    int x = 1; 
}; 
+0

是啊,我也想通了在此期間。所引用的SO問題/答案相當不完整且具有誤導性。 – plasmacel

+0

@plasmacel接受的答案覆蓋了所需的信息...在最後以粗體顯示,它解釋瞭如果您不寫'constexpr',那麼函數是constexpr當且僅當它符合constexpr的標準;然後最後一段說明,如果你想在你的函數不符合條件時得到一個編譯錯誤,你自己就可以編寫'constexpr'(因爲你的函數不符合標準) –