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