constexpr默认默认构造函数

pla*_*cel 8 c++ compiler-errors c++11 c++14

如果我想将我的default-ed默认构造函数声明为,那么我会得到Clang 3.8和GCC 5.3的编译器错误constexpr.根据这个 stackoverflow问题,它应该工作正常:

struct A
{
    constexpr A() = default;

    int x;
};
Run Code Online (Sandbox Code Playgroud)

然而:

Error: defaulted definition of default constructor is not constexpr
Run Code Online (Sandbox Code Playgroud)

你有什么线索到底是什么吗?

Jor*_*nee 12

就目前而言,x仍然未初始化,因此无法在编译时构造对象.

你需要初始化x:

struct A
{
    constexpr A() = default;

    int x = 1;
};
Run Code Online (Sandbox Code Playgroud)

  • @plasmacel 接受的答案涵盖了所需的信息...在接近末尾的粗体中它解释说,如果您不写 `constexpr`,那么该函数是 constexpr,当且仅当它满足 constexpr 的标准;然后最后一段解释说,如果你想在你的函数不符合标准时出现编译错误,你可以自己编写`constexpr`(就像你的不符合) (2认同)