constexpr构造函数与编译时验证

时间:2014-02-04 16:21:06

标签: c++ c++11 constexpr

我想建立一个可以选择constexpr-ness的课程。当然,我想利用编译时错误检查。

当给定参数不是常量表达式时,每个constexpr函数(包含的构造函数)也必须在运行时工作。这应该是每次在函数参数的static_assert函数中使用constexpr时无法编译的原因。

这样说,我已经读过,可以使用抛出mechnanism的异常,因为当函数被调用为常量表达式时,可以在编译时评估这些异常。如果可行,那么问题就解决了。

但构造函数仍然没有解决问题,因为constexpr构造函数似乎必须没有正文......所以看起来我不能使用异常抛出!

有什么想法吗?

1 个答案:

答案 0 :(得分:7)

以下可能会有所帮助:

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;
}