Я использую gcc 4.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;
}
Почему существует такая огромная разница? Я делаю что-то не так во второй программе?
Изменить: Я компилирую это с помощью g++ -std=c++0x -O3
на 64-битной платформе.