我使用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