给出以下代码:
constexpr int omg() { return 42; }
const int a = omg(); // NOT guaranteed to be evaluated at compile time
constexpr const int a = omg(); // guaranteed to be evaluated at compile time
有没有办法强制在编译时评估某些内容而不将其分配给constexpr(或者在编译时上下文中,如模板参数或enum shenanigans)?
这样的事情:
const int a = force_compute_at_compile_time(omg());
也许这样的事情(它没有编译 - 我对constexpr并不多):
template<typename T> constexpr T force_compute_at_compile_time(constexpr const T& a) { return a; }
答案 0 :(得分:5)
您可以使用非类型模板参数:
template <int N> constexpr int force_compute_at_compile_time();
const int a = force_compute_at_compile_time<omg()>();
由于N
是模板参数,因此 是一个常量表达式。