具有编译时间验证的ConstexPR构造函数

constexpr constructor with compile time validation

本文关键字:ConstexPR 构造函数 验证 时间 编译      更新时间:2023-10-16

我想建立一个具有constexpr-ness选项的类。而且,当然,我想利用编译时间错误检查。

当给定参数不是恒定表达式时,每个constexpr函数(包括构造函数)也必须在运行时工作。这就是为什么每次您在 constexpr函数中使用 static_assert在函数参数上无法编译的原因。

说,我读过,我可以使用抛出机制的异常,因为当函数被调用恒定表达式时,可以在编译时评估这些例外。如果有效,则解决问题。

但是,问题仍然无法解决构造函数,因为constexpr构造函数似乎一定没有身体...所以看起来我不能使用外来扔掉!

有什么想法?

以下可能会有所帮助:

class A
{
public:
    constexpr A(int i) : i(i != 42 ? throw 42 : i) {}
private:
    int i;
};
int main(int argc, char *argv[])
{
    constexpr A a1(42);
    //constexpr A a2(41); // Compile error as expected.
    return 0;
}