inline函数发生在编译阶段
inline函数的注意事项:
1)inline一般写在头文件中
2)inline只在release版本生效
3)inline只是给编译器的一个建议(递归,循环,switch会被处理成inline)
4)inline是基于实现的,不是基于声明的
inline缺点
代码膨胀为代价 空间换时间
1)开展的开销>执行的开销 设为inline
2)开展的开销<执行的开销 不设为inline
1、inline函数和宏的区别?
1)inline函数发生在编译阶段 有类型检查和安全检查
宏发生在预编译阶段 没有类型检查和安全检查
2)inline是一种更安全的宏
2、inline函数与普通函数的区别?
inline函数:
int inline sum(int a,int b)
{
return a+b;
}
int f()
{
return Sum()
}
编译的结果为:
int f()
{
return a+b;
}
实际上相当于把Sum()函数的代码直接加载到f函数中,减少了Sum()函数的调用,从而提高效率,缺点是会增加f函数编译后的长度,因此inline函数不能过长。
普通函数:
int sum(int a,int b)
{
return a+b;
}
int f()
{
return Sum()
}
在此函数中,f()函数会调用Sum()函数,因此sum函数会将a+b的返回值返回给f函数,然后f函数再返回该返回值。
3、inline函数和static函数的区别?
1)inline函数没有清栈和开栈的开销
static有开栈和清栈
2)inline因为编译阶段代码展开导致函数本文件可见
static符号属性为1 本文件可见
本文探讨了inline函数的特性,包括它在编译阶段的作用,以及它与宏、普通函数和static函数的区别。inline函数提供类型检查和安全检查,但可能导致代码膨胀。与宏相比,inline更安全;与普通函数相比,它提高了效率但增加了编译后的代码长度;与static函数相比,inline没有栈操作且作用域限于本文件。
1万+

被折叠的 条评论
为什么被折叠?



