gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:44 27 4
gpt4 key购买 nike

我在用 C++ 编译内联函数时遇到问题。

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

我确信 about loop 不能用它工作,但我读过某处递归可以工作,如果我们传递常量值。

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

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

这是如何工作的?

我正在使用 turbo 3.2


另外,如果内联函数代码太大,那么编译器是否可以在正常函数中自动更改它?

谢谢

最佳答案

这个特定的函数绝对可以内联。这是因为编译器可以计算出这种特殊形式的递归(尾递归)可以简单地变成一个普通循环。对于普通循环,内联它完全没有问题。

编译器不仅可以内联它,甚至可以在不为函数生成任何代码的情况下计算编译时常量的结果。

使用 GCC 4.4

int fac = f(10); 

产生了这条指令:

movl    $3628800, 4(%esp)

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

关于c++ - 关于C++内联函数的两个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542411/

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