C++11当constexpr用作函数参数时,是否可以强制对其求值?
假设我有这样的代码:C++11当constexpr用作函数参数时,是否可以强制对其求值?,c++11,constexpr,C++11,Constexpr,假设我有这样的代码: 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
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在编译时进行求值,即使它不被分配给const
有一些替代方法可以将int包装到模板中,但是案例3呢?该值为char[],没有机会用作模板参数。您可以使用模板
template<int N> struct force_constexpr_eval {
static const int value = N;
};
int main() {
auto val = force_constexpr_eval<foo(1)>::value;
}
谢谢,很抱歉更新了这个问题。如果该值不能用作诸如char[]之类的模板参数,该如何处理?