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++ 运行的时间如此不同? 的相关文章

  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 关闭 XDOCUMENT 的实例

    我收到这个错误 该进程无法访问文件 C test Person xml 因为它是 被另一个进程使用 IOException 未处理 保存文件内容后如何关闭 xml 文件的实例 using System using System Collec
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 在 GCC 和 Clang 下,使用 lambda 的简单 RAII 包装器的复制初始化意外失败

    我在创建一个简单的 RAII 包装器时遇到了一个意想不到的问题 更不用说下面代码的逻辑不完整性了 复制构造函数和赋值运算符未删除等 这意味着是一个SSCCE 令我印象深刻的是复制初始化我的包装器与临时 lambda 的结果会导致编译错误 而
  • .net Framework (.net 4.0) 中定义 Base 3 数字的类

    我正在寻找一些可以用来定义 3 基数 三进制数 的类 有什么我可以在 net 框架中使用的东西或者我需要写一些东西吗 谢谢你的帮助 您可以使用解析Convert ToInt32 s base http msdn microsoft com
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

  • 在 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