2016-04-03 235 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'(因为你的函数不符合标准) –