我正在使用 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;
}
为什么会有这样巨大的差异?我在第二个程序中做错了什么吗?编辑:我正在64位平台上使用g++ -std=c++0x -O3进行编译。