如何确定constexpr类是否在编译时构建?

时间:2015-03-24 03:01:47

标签: c++11 constexpr

让我们考虑以下代码:

class A {
public:
   constexpr A(int value) : m_value(value);
private:
   const int m_value;
};

void f(const A& a);

f(42); // OK
f(std::rand()); // KO - How to detect this case?

有没有办法确定A是在编译时还是在运行时构建的?

1 个答案:

答案 0 :(得分:0)

验证表达式确实是constexpr的一种方法是将其分配给constexpr变量:

int main()
{
    constexpr int a = f(42);
    constexpr int b = f(std::rand());
    return(0);
}

由于值constexpr变量必须由编译器计算,b的赋值将产生错误。海湾合作委员会说:

foo.cpp:25:35: error: call to non-constexpr function ‘int rand()’
     constexpr int b = f(std::rand());

我不确定是否可以通过仅产生警告的方式来完成。