【问题标题】:constexpr defaulted default constructorsconstexpr 默认的默认构造函数
【发布时间】:2016-07-23 09:14:30
【问题描述】:

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

struct A
{
    constexpr A() = default;

    int x;
};

然而:

Error: defaulted definition of default constructor is not constexpr

你知道到底发生了什么吗?

【问题讨论】:

    标签: c++ c++11 compiler-errors c++14


    【解决方案1】:

    就目前而言,x 保持未初始化,因此无法在编译时构造对象。

    你需要初始化x:

    struct A
    {
        constexpr A() = default;
    
        int x = 1;
    };
    

    【讨论】:

    • 是的,我同时也想通了。引用的 SO 问题/答案非常不完整且具有误导性。
    • @plasmacel 接受的答案涵盖了所需的信息...在结尾处以粗体表示,如果您不写constexpr,那么该函数是 constexpr 当且仅当它满足常量表达式;然后最后一段解释说,如果你想在你的函数不符合条件(因为你的不符合条件)时出现编译错误,你可以自己写constexpr
    猜你喜欢
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2018-10-04
    • 2016-01-06
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多