我正在使用 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;
}
为什么会有这么大的差别呢?我在第二个程序中做错了什么吗?
Edit:我正在编译这个g++ -std=c++0x -O3
在 64 位平台上。
joe
是一个积分常量表达式;它必须可以在数组范围内使用。因此,合理的编译器会在编译时对其进行评估。
在您的第二个程序中,即使编译器可以在编译时计算它,也没有理由必须这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)