我使用constexpr
得到斐波那契数斐波那契使用constexpr函数(编译时间与运行时间)
枚举用于计算
#include <iostream>
constexpr long fibonacci(long long n)
{
return n < 1 ? -1 :
(n == 1 || n == 2 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));
}
enum Fibonacci
{
Ninth = fibonacci(9),
Tenth = fibonacci(10),
Thirtytwo = fibonacci(32)
};
int main()
{
std::cout << Fibonacci(Thirtytwo);
// std::cout << fibonacci(32);
return 0;
}
我收到以下错误编译时斐波那契上执行的:
1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(12): note: while evaluating 'fibonacci(30)' 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(6): note: while evaluating 'fibonacci(31)' 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(12): note: while evaluating 'fibonacci(31)' 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(12): error C2131: expression did not evaluate to a constant 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(5): note: failure was caused by control reaching the end of a constexpr function 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(12): note: while evaluating 'fibonacci(32)' 1>c:\users\hsingh\documents\visual studio 2017\projects\consoleapplication4\consoleapplication4\source.cpp(14): error C2057: expected constant expression 1>Done building project "ConsoleApplication4.vcxproj" -- FAILED.
但是当我使用运行时间 INT X = 30,Y = 2 ; 的std ::法院< <斐波纳契(X + Y); //斐波那契是在运行时计算
我不会说我有一个问题,但我有一些困惑,如:
- 是内存使用的编译时和运行时使用的
constexpr
不同? - 如何知道停止利用或使用编译时数据的位置?
- 我仍然试图做的是如何利用编译时间和运行时间的优势共同完成类似Fibo的计算(使用编译直到可以和之后,让剩余的计算在运行时完成)。
任何示例或参考(如果可用)都将有所帮助。
你是什么意思“当我使用运行时间”?是不是完全相同的代码(减两行)? – user463035818
std :: cout << fibonacci(32);它的运行时间计算 –
可能或可能不是[编译时何时评估constexpr函数?](https://stackoverflow.com/q/14248235/11683) – GSerg