这是我想要做的简化版本。
constexpr float f(float a, float b){
constexpr float temp = a+b;
return temp*temp*temp;
}
在我的版本中,a + b更复杂,所以我不想剪切和粘贴三次。使用3 *(a + b)也不是实际功能的有效解决方案。我试图保持与语法相关的问题,而不是代数。我可以通过将+ b移动到它自己的constexpr函数来实现它,但我宁愿不用其他无用的函数来污染命名空间。
答案 0 :(得分:6)
正如您所发现的,您无法在constexpr函数体内声明变量,甚至是constexpr变量。
通过将其作为参数传递给第二个constexpr函数,仍然可以分解出一个公共表达式。对于你在这里给出的例子:
constexpr float pow3(float c) {
return c*c*c;
}
constexpr float f(float a, float b) {
return pow3(a+b);
}
答案 1 :(得分:3)
这在C ++ 11中是不允许的,但现在允许在C ++ 14中使用。
请参阅https://en.wikipedia.org/wiki/C%2B%2B14#Relaxed_constexpr_restrictions