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

2023-11-27

我正在使用 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(使用前将#替换为@)

constexpr 问题,为什么这两个不同的程序使用 g++ 运行的时间如此不同? 的相关文章

  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • 在 Jekyll 中如何按帖子数对 site.tags 进行排序?

    抱歉 我是 Ruby 新手 但我正在尝试向我的模板添加一个液体标签 我可以循环显示五个最流行标签的列表 由于某种原因 当我使用这个插件时 它只输出一个标签 这是我在 mu 插件中放入的内容 module Jekyll class Popul
  • 如何使用 Swift 创建具有动态单元高度的静态单元

    我已经看过几个教程 这些教程展示了如何设置动态单元高度 但所有这些教程仅在您通过设置适当的约束并使用动态单元来使用动态单元时才显示UITableViewAutomaticDimension 但是 我想对静态单元格执行此操作 我的应用程序中有
  • 如何在 Django 中组织 JS 文件?

    我目前正在处理一个 Django 项目 我包含不同的 JS 库 并创建 JS 文件来管理其他库 但我不知道每个 html 页面的 JS 文件的正确组织 例如 我有一个 Main js 和 Milk js 位于基本模板中 但我不希望这两个文件
  • for 循环在 CMD 提示符下工作,但不在批处理文件中工作 - for 循环是复制粘贴的

    注意 我几乎不知道批处理文件 for 循环是如何工作的 我当前拥有的批处理文件 C Program Files x86 HMA Pro VPN bin HMA Pro VPN exe connect C Program Files x86
  • 测试 Chef 角色和环境

    我是 Chef 新手 一直在使用测试厨房测试我的食谱的有效性 效果很好 现在 我试图在最初运行 Chef 之前确保生产节点上特定于环境的属性正确 这些将在角色中定义 例如 我可能有使用带有开发设置的 Vagrant 盒子聚合的菜谱 这会验证
  • 服务器如何处理来自多个客户端的 Web 服务请求

    我刚刚完成了一个 Android 应用程序 它使用 Web 服务连接到远程数据库 我在本地主机上工作 现在 我计划在服务器上托管我的 Web 服务 假设我的 Android 应用程序安装在任意数量的不同客户端智能手机上 每个智能手机用户同时
  • 以节省内存的方式增长 data.frame

    根据逐行创建 R 数据框 附加到 a 并不理想data frame using rbind 因为它每次都会创建整个 data frame 的副本 我如何积累数据R导致data frame而不受到这种处罚 中间格式不需要是data frame
  • 一般来说,解引用指针表达式结果是引用类型吗?

    引用指针会导致间接使用对象的值 但我从来没有真正理解 使用 是什么意思 我开始思考这个问题 直到我的编译器对以下代码产生错误 int i 0 pi i decltype pi c error c declared as reference
  • 快速更改 UINavigationBar 中 UIBarButtonItem 的宽度

    我需要在 swift 2 0 中为导航栏按钮设置框架 我试过这个代码 self navigationController navigationBar drawRect CGRectMake 0 0 30 30 但这行不通 提前致谢 Swif
  • Java中可以写swap方法吗? [复制]

    这个问题在这里已经有答案了 问题是 编写一个交换两个变量的方法 这两个变量应该是原语 它不需要是通用的 例如二int变量 有办法吗 虽然不可能编写一个简单地交换两个变量的函数 但可以编写一个辅助函数这使您能够 使用交换两个变量只有一个声明
  • 成员函数隐藏自由函数

    void foo int class X void foo void bar foo 42 error no matching function for call to X foo int note candidate is note vo
  • 为什么“object”是“type”的实例,而“type”是“object”的实例?

    我有点困惑object and typePython 3 中的类 也许有人可以消除我的困惑或提供一些额外的信息 我目前的理解是每个班级 除了object 继承自一个名为的基类object 但每堂课 包括object 也是该类的一个实例typ
  • 如何使用 jquery 或 JavaScript 在一次浏览中上传多个文件

    我正在开发一个网络应用程序 其中我为多个文件创建了一个页面 一次上传一个浏览文件 而不是一次上传一个文件 用户将能够通过单击浏览来选择多个文件 如果有人对此有解决方案 欢迎 Thanks 对于替代解决方案 您可以使用 HTML5 多重上传
  • android 的事件监听器是如何工作的?

    如何从 View 对象捕获事件 只有一个线程在运行 UI 线程 当我们没有实现任何我们自己的线程时 假设我已经为按钮实现了 onClickListener 并且该按钮的功能是 取消 对于由按钮引发的事件 即取消 UI 正在执行的任何操作 它
  • 如何保存控制台应用程序的输出

    我需要有关如何让我的 C 控制台应用程序通过标准输出向用户显示文本 同时仍然能够稍后访问它的建议 我想要实现的实际功能是在程序执行结束时将整个输出缓冲区转储到文本文件中 当我找不到更干净的方法时 我使用的解决方法是子类化TextWriter
  • 格式化 linq 查询结果中的日期

    以下 linq toEntity 查询给出以下结果 public class UserCountResult public DateTime date get set should this be string instead public
  • Python检测linux关机并在关机前运行命令

    是否可以检测并中断 linux Ubuntu 16 04 关闭信号 例如单击电源按钮或电池耗尽 我有一个总是录制视频的Python应用程序 我想检测这样的信号 所以我在操作系统关闭之前正确关闭录制 当linux关闭时 所有进程都会收到SIG
  • Eclipse 动态 Web 项目 - 默认起始页

    我在 Eclipse 中创建了动态 Web 项目 WEB INF 文件夹中有index html 我点击项目主文件夹 Run as gt Run on server 选择 Tomcat v7 0 完成 运行正常 但是 当我将 index h
  • 为什么没有 OutOfMemoryError 子类?

    众所周知 造成这种情况的原因是多方面的OutOfMEmoryError see 第一个答案 为什么只有一个异常涵盖所有这些情况 而不是继承自的多个细粒度异常OutOfMEmoryError 我预料到了 因为当这种情况发生时 你真的无能为力
  • constexpr 问题,为什么这两个不同的程序使用 g++ 运行的时间如此不同?

    我正在使用 gcc 4 6 1 并且得到一些有趣的行为 涉及调用constexpr功能 这个程序运行得很好并且立即打印出来12200160415121876738 include