C ++ 11是否可以强制constexpr在用作函数参数时进行求值?

时间:2015-05-22 14:55:21

标签: 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 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[],无法用作模板参数。

1 个答案:

答案 0 :(得分:0)

您可以使用模板。

template<int N> struct force_constexpr_eval {
    static const int value = N;
};
int main() {
    auto val = force_constexpr_eval<foo(1)>::value;
}