5

这是我想做的简化版本。

constexpr float f(float a, float b){
    constexpr float temp = a+b;
    return temp*temp*temp;
}

在我的版本中,a+b 要复杂得多,所以我不想剪切和粘贴 3 次。使用 3*(a+b) 也不是实际功能的有效解决方案。我试图让问题与语法相关,而不是代数。我可以通过将 a+b 移动到它自己的 constexpr 函数来让它工作,但我宁愿不要用其他无用的函数污染命名空间。

4

2 回答 2

6

正如您所发现的,您不能在 constexpr 函数的主体内声明变量,甚至是 constexpr 变量。

通过将其作为参数传递给第二个 constexpr 函数,仍然可以分解出一个通用表达式。对于您在此处给出的示例:

constexpr float pow3(float c) {
    return c*c*c;
}

constexpr float f(float a, float b) {
    return pow3(a+b);
}
于 2012-08-23T13:37:22.903 回答
3

这在 C++11 中是不允许的,但现在在 C++14 中是允许的。

请参阅https://en.wikipedia.org/wiki/C%2B%2B14#Relaxed_constexpr_restrictions

于 2012-08-14T18:01:43.290 回答