内联函数分析
2019-09-17 09:51:02来源:博客园 阅读 ()
内联函数分析
目录
- 1. 内联函数的声明
- 2. 内联函数的特性
- 3. 内联函数与编译器
- 4. 内联函数的限制
1. 内联函数的声明
- 在C++中,const常量可以代替宏常数定义,而宏代码段则推荐使用内联函数来代替。
- C++中使用
inline
关键字声明内联函数 - inline只是一种请求,编译器不一定允许这种请求
- inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求
inline int func(int a, int b)
{
return a < b ? a : b;
}
2. 内联函数的特性
- C++编译器直接将内联函数的函数体扩展到函数调用的地方
- 内联函数调用时没有压栈、跳转、返回等额外开销
- 内联函数具有参数检查、返回类型等普通函数特征
- 内联函数与宏代码段相比,保留了比普通函数效率更高、开销更小的优点,摒弃了宏代码段不经过编译器可能带来副作用的缺点
#include <stdio.h>
#define MAX(a, b) ((a) < (b) ? (a) : (b))
inline int max(int a, int b)
{
return a < b ? a : b;
}
int main(int argc, char *argv[])
{
int a1 = 1;
int b1 = 3;
int c1 = MAX(++a1, b1);
int a2 = 1;
int b2 = 3;
int c2 = max(++a2, b2);
printf("a1 = %d\n", a1);
printf("b1 = %d\n", b1);
printf("c1 = %d\n", c1);
printf("\n");
printf("a2 = %d\n", a2);
printf("b2 = %d\n", b2);
printf("c2 = %d\n", c2);
return 0;
}
3. 内联函数与编译器
- 现代C++编译器能够进行编译优化,函数即使没有inline声明,也可能被内联编译;声明了inline,编译器也未必会同意
- 一些现代C++编译器还提供了扩展语法,允许强制内联,如g++的
__attribute__((always_inline))
__attribute__((always_inline)) int func(int a, int b)
{
return a < b ? a : b;
}
4. 内联函数的限制
C++语言对内联函数具有以下限制:
- 不能存在任何形式的循环语句
- 不能存在过多的条件判断语句
- 函数体不能过于庞大
- 不能对函数进行取址操作
- 函数内联声明必须在调用语句之前
注意:这些只是C++语言本身对内联函数的限制,现代C++编译器可以突破这些限制,实际上,只要函数不是过于夸张,内联一般都是可以成功的。
原文链接:https://www.cnblogs.com/songhe364826110/p/11518886.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ const成员函数 2020-06-03
- C++ 析构函数 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash