假设我有这样的代码:
constexpr int foo(int a)
{
return a * 2;
}
constexpr int bar(const char* str)
{
return strlen(str);
}
int test(int value)
{
// Do something
}
int main(int argc, char* argv[])
{
// Case 1, evaluated at compile time
const int value = foo(1);
test(value);
// Case 2, evaluated at run-time
test(foo(1));
// Case 3
test(bar("Hello"));
}
在案例1中,foo
将在编译时进行评估,而在案例2中,将在运行时对其进行评估。即使在案例1中,我也必须保留const
关键字。
是否有任何方法可以强制constexpr
在编译时进行评估,即使将not
分配给const
?
有一些替代方法可以将int
包装到模板中但是案例3怎么样?值为char[]
,无法用作模板参数。
答案 0 :(得分:0)
您可以使用模板。
template<int N> struct force_constexpr_eval {
static const int value = N;
};
int main() {
auto val = force_constexpr_eval<foo(1)>::value;
}