关于C++内联函数的两个问题

2023-12-01

当我在 C++ 中编译内联函数时,我有疑问。

递归函数可以与内联一起使用吗?如果是,请描述如何。

我确信循环不能使用它,但我读过一些地方,如果我们传递常量值,递归会起作用。

我的朋友给我发送了一些内联递归函数作为常量参数,并告诉我这可以工作,但在我的笔记本电脑上不起作用,编译时没有错误,但在运行时不显示任何内容,我必须通过强制中断来终止它。

inline f(int n) {
    if(n<=1)
        return 1;
    else {
        n=n*f(n-1);
        return n;
    }
}

这是如何运作的?

我用的是涡轮3.2


另外,如果内联函数代码太大,编译器可以在普通函数中自动更改它吗?

thanks


这个特定的函数绝对可以被内联。这是因为编译器可以发现这种特殊形式的递归(尾递归)可以轻松地转变为普通循环。对于正常的循环来说,内联它根本没有问题。

编译器不仅可以内联它,甚至可以计算编译时常量的结果,而无需为该函数生成任何代码。

使用海湾合作委员会 4.4

int fac = f(10); 

产生了这个指令:

movl    $3628800, 4(%esp)

在检查汇编输出时,您可以轻松验证该函数是否确实内联了编译时未知的输入。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于C++内联函数的两个问题 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Cosmos DB 中是否支持使用 OData 进行分页?

    我可以看到通过 SQL API 访问 Azure 中的 Cosmos DB 时支持偏移 限制 但 OData 是否支持此功能 UPDATE 您可以下载my demo在github上 和本文 and 官方文件可以帮助你 我的存储帐户中的数据
  • 根据条件运行中间件 - Laravel

    我有一个中间件 用于检查请求中的特定标头参数并根据该参数发回响应 但我遇到的问题是我不希望这个中间件始终在我的控制器中的函数上运行 我希望如果函数中的条件为真 例如 存储函数 中间件就会运行 我怎样才能实现这个目标 在执行控制器操作之前调用
  • 向量化 seq 的优雅方法?

    尽管标题相似 但这不是同一个问题在 R 中向量化rep和seq 我的近期目标 给定一个向量 我想生成一个新向量 其中包含原始值以及旧值中每个值之间的规则间隔 这并不难 一种策略是使用更通用的函数 给定两个向量和一个指定的by间隔 使用相同的
  • git commit 的 --date 参数的格式是什么

    我需要覆盖 Git 的提交日期 所有文档都指向 date参数 但随后就留下了一个不知道适当格式的线索 我已经尝试了我能想到的所有排列 我得到 致命 日期格式无效 每一个的错误 Git 2 6 2015 年第 3 季度 添加了一个新选项 Se
  • jQuery 热键:防止 IE 运行自己的快捷方式,例如 Alt+H

    Using jQuery hotkeys I try to bind shortcuts like Alt H Alt C to some specific actions in my site The event propagation
  • 在python中,如何检查字符串是否同时包含大写和小写字母

    我看过另一个帖子 和我的问题类似 密码检查 Python 3 除了我的问题涉及检查密码是否同时包含大写和小写问题 我的代码如下 但是执行时它无法识别密码中的小写和大写字母 它只识别一种类型 我怎样才能让它识别这两种类型 还有一种更简单的方法
  • 推送通知后离子设置徽章

    我在用着IONIC框架 我想在收到推送通知后设置应用程序的徽章 当我的申请关闭时 有办法做到这一点吗 这是为其他遇到同样问题的人准备的 我相信您正在谈论使用从服务器收到的更新徽章编号使徽章可见 首先要在 Push 的 init 方法的代码中
  • 设置对话框列表中文本的样式

    我使用了这里给出的说明 http developer android com guide topics ui dialogs html AddingAList在对话框中创建列表 问题是我似乎没有找到将长文本包装在选项内的方法 请看下图 请告
  • V8如何管理对象实例的内存?

    http code google com apis v8 design html 上一页解释了 v8 团队用于实现快速属性访问的优化技术 但它的对象实例又如何呢 新属性可以随时添加到对象中 因此应该允许其大小增长 它是否只是简单地分配默认大
  • Android java.lang.ClassCastException:android.widget.RelativeLayout 无法转换为 android.widget.EditText

    当我点击一个按钮从一个活动转到另一个活动时 我在 Android 中遇到以下异常 我是 Android 开发新手 所以这可能不是最聪明的问题 java lang ClassCastException android widget Relat
  • 请求如何确定响应的编码?

    怎样才能有回应apparent encoding属性不正确 我有下面的代码片段 演示了我的问题 import requests url https item jd com 100000177760 html r requests get u
  • 将单元测试添加到现有的 ASP.NET Web 表单应用程序

    我有一个现有的 asp net webforms 应用程序 我想添加一些单元测试 但不确定具体如何进行 该应用程序是数据库驱动的功能 我想您可以将其与高级论坛进行比较 逻辑 数据访问和表示大部分是分开的 我应该测试什么方法 如何处理数据库和
  • VSCode TypeScript Intellisense 不工作

    从字面上看 我在这里拔掉了我的头发 Mac 上的 VSCode 1 6 0 Typescript 2 0 2 但我也尝试过 2 0 0 我尝试过以 es5 es6 为目标 无论是否有 commonjs 模块目标 我无法获取项目本地其他文件的
  • Prolog:停止条件?

    这是一个非常简单的 Prolog 知识库 spouse bill cheryl married X Y spouse X Y married X Y spouse Y X 我运行了以下查询 请注意 有时答案是正确的名称 仅 但有时答案是正确
  • PHP 语法错误 T_ENCAPSED_AND_WHITESPACE

    我开始学习 php 基础知识 但在理解如何将代码与字符串混合在一起时遇到一些问题 我发现了一种很棒且有用的样式来打印字符串块 但我不知道名称 也无法找到示例 下面的代码返回错误 解析错误 语法错误 意外的 T ENCAPSED AND WH
  • 如何使用 C# 以编程方式创建 VC++ 项目?

    我想用C 创建一个VC 项目 我看到这个MSDN 文章关于创造C and VB console application projects 但是VC 项目怎么办呢 ADD 1 我遇到了与下面的线程完全相同的问题 它的解决方案是操纵原始XML
  • Div 高度 100% 并扩展以适合内容 [重复]

    这个问题在这里已经有答案了 我的页面上有一个 div 元素 其高度设置为 100 身体的高度也设置为 100 内部 div 有背景等 并且与正文背景不同 这适用于使 div 高度为浏览器屏幕高度的 100 但问题是该 div 内的内容垂直延
  • 如何使用 VisualState AdaptiveTrigger 更改 ListView Item FontSize

    我正在使用视觉状态自适应触发器根据有效的屏幕分辨率更改页面外观 这很好用 但我无法让它适用于 ListView 项目 我的 ListView 看起来像这样
  • 使用 Spring 方面进行编译时代码检测的 Ant 目标

    我使用 Netbeans 6 7 和 Ant 开发了一个 Web 应用程序 web 应用程序可以工作 但我想重构代码以使用 Configurable Spring 注释来实现更清晰的依赖注入 我能够让 Spring 方面的加载时编织 LTW
  • 关于C++内联函数的两个问题

    当我在 C 中编译内联函数时 我有疑问 递归函数可以与内联一起使用吗 如果是 请描述如何 我确信循环不能使用它 但我读过一些地方 如果我们传递常量值 递归会起作用 我的朋友给我发送了一些内联递归函数作为常量参数 并告诉我这可以工作 但在我的