【发布时间】:2016-02-10 16:31:54
【问题描述】:
我有以下代码:
constexpr unsigned long long power_function(const unsigned long long prime, const unsigned long long iterations) {
return iterations > 0 ? prime * power_function(prime, iterations - 1) : prime;
}
/* Inside my Class Definition*/
private:
static constexpr unsigned long long prime = power_function(-363, 1'000'000); //Error occurs here
IntelliSense 抱怨 power_function 使用不正确。但是对于我的生活,我无法解决问题所在。我正在使用 Visual Studio 2015,仅供参考。
错误信息:
Error C2131 expression did not evaluate to a constant Basic Server c:\<snip> 28
Error C2131 expression did not evaluate to a constant Basic Server c:\<snip> 33
第 28 行对应返回函数所在的行,第 33 行对应定义 constexpr 的行。
【问题讨论】:
-
它可以编译吗?有时 IntelliSense 是错误的。
-
显然有一个recursion limit in constexpr functions。输出窗口显示什么? (通常它比错误列表中显示的内容更多。)
-
@Cameron 我认为你是对的。如果我将其更改为 300 而不是 100 万,IntelliSense 仍然会抱怨,但编译错误消失了。
-
@KarolyHorvath 它解析为一个略小于
1<<64的数字。它恰好是一个素数,因此我使用它。 -
点赞that