constexpr构造函数与编译时验证

nya*_*108 2 c++ constexpr c++11

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

constexpr当给定参数不是常量表达式时,包含的每个函数(构造函数)也必须在运行时工作.这应该是为什么每次你使用的原因static_assertconstexpr功能后,它无法编译函数参数.

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

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

任何的想法?

Jar*_*d42 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 它适用于g ++ TDD 4.7.1和g ++ TDD 4.8.1(在windows上).你好像是gcc 4.8.0.不禁多了,抱歉. (2认同)