私はgcc4.6.1を使用していて、constexpr
関数の呼び出しを含むいくつかの興味深い動作を取得しています。このプログラムは問題なく実行され、すぐに印刷され12200160415121876738
ます。
#include <iostream>
extern const unsigned long joe;
constexpr unsigned long fib(unsigned long int x)
{
return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}
const unsigned long joe = fib(92);
int main()
{
::std::cout << "Here I am!\n";
::std::cout << joe << '\n';
return 0;
}
このプログラムの実行には永遠に時間がかかり、値が出力されるのを待つのに我慢できませんでした。
#include <iostream>
constexpr unsigned long fib(unsigned long int x)
{
return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}
int main()
{
::std::cout << "Here I am!\n";
::std::cout << fib(92) << '\n';
return 0;
}
なぜそんなに大きな違いがあるのですか?2番目のプログラムで何か間違ったことをしていますか?
編集:私はこれをg++ -std=c++0x -O3
64ビットプラットフォームでコンパイルしています。