让我们考虑以下代码:
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是在编译时还是在运行时构建的?
答案 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());
我不确定是否可以通过仅产生警告的方式来完成。