gpt4 book ai didi

c++ - constexpr 问题,为什么这两个不同的程序在 g++ 中运行的时间如此不同?

转载 作者:可可西里 更新时间:2023-11-01 14:59:37 25 4
gpt4 key购买 nike

我正在使用 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 编译它。

最佳答案

joe 是一个整数常量表达式;它必须在数组范围内可用。出于这个原因,一个合理的编译器将在编译时对其进行评估。

在你的第二个程序中,即使编译器可以在编译时计算它,也没有理由必须这样做。

关于c++ - constexpr 问题,为什么这两个不同的程序在 g++ 中运行的时间如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7065200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com