请教一个问题:为什么内联函数不能 有循环语句和switch语句呢,谢谢,详细点

来源:百度知道 编辑:UC知道 时间:2024/05/22 08:12:02

如有函数需要频繁使用,则所用时间会很长.(因为执行到调用函数处,流程转移到函数入口处,同时进行参数传递,这时要记下调用函数前的地址,执行完后,流程回到之前记下的地址处,调用函数的下一条指令.这都要花费一定时间)C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中,就是所谓的内联函数.

但内联函数一般只对5个语句以下而频繁使用的函数声明为内联函数,有循环语句和switch语句,递归是机制决定不会被置换的.又像有1000行的函数,编译系统也会忽略你的inline声明,将其按普通函数处理.

不知这样解释能否令你满意.

不是内联函数中不能有循环语句,而是当内联函数中出现了复杂的逻辑控制语句后,编译器会不再认为它是一个内联函数。

也就是说,当内联函数中实现过于复杂时,编译器会将它作为一个普通函数处理。

这是由内联函数的特殊性所决定的,由于内联是调用处展开的方式,所以编译器认为只有足够简单的函数才可以具有该特性,复杂函数编译器会放弃内联特性。

谁说不能有呀,给你们套子你们就钻呀!

EXP1:

inline void fun()

{

for(int i=0;i<10;i++)

{

printf("Hello");

}

switch(i)

{

case 10:

printf("cxczczxcxz");

}

}

int main()
{
fun();

}

这是规定