C++宏函数和内联函数如何使用
今天小编给大家分享一下C++宏函数和内联函数如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1. 宏常量&宏函数
1.1 定义
// a. 定义一个宏常量 #define MAX 1024 // 宏常量 MAX称为符号常量 // b. 定义一个宏函数 // 宏函数:宏函数就是使用宏定义定义出来的函数,并不是真正意义上的函数。 #define GETSUM(x, y) ((x) + (y)) // 宏函数
1.2 使用宏函数的注意事项
要保证运算的完整性;
宏函数的使用场景:频繁调用和短小的函数,封装成宏函数;
使用宏函数的优点:以空间换时间;
2. 内联函数
2.1 定义
内联函数,C++独有;
内联函数本质也是一个普通的函数,解决了宏函数的缺陷;
// 内联函数在函数声明和函数定义上都要加上inline关键字。 inline int fun(); inline int fun() { cout << "fun..." << endl; }
2.2 某些情况编译器不会做内联编译
不能存在任何形式的循环语句
不能存在过多的条件判断语句
函数体不能过于庞大
不能对函数进行取地址的操作
3. 补充
3.1 宏定义和函数的区别
宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数;
宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值;
宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型;
宏定义不要在最后加分号;
3.2 宏定义和typedef的区别
宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名;
宏替换发生在预编译阶段之前,属于文本插入替换;typedef是编译的一部分;
宏不检查类型;typedef会检查数据类型;
宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束;
注意对指针的操作,typedef char * p_char和#define p_char char *区别巨大;
3.3 宏函数和内联函数的区别
在使用时,宏只做简单字符串替换(编译前)。而内联函数可以进行参数类型检查(编译时),且具有返回值;
内联函数在编译时直接将函数代码嵌入到目标代码中,省去函数调用的开销来提高执行效率,并且进行参数类型检查,具有返回值,可以实现重载;
宏定义时要注意书写(参数要括起来)否则容易出现歧义(保证运算的完整性),内联函数不会产生歧义;
内联函数有类型检测、语法判断等功能,而宏没有;
3.4 define宏定义和const的区别
处理阶段:define是在编译的预处理阶段起作用,而const是在编译、运行的时候起作用;
安全性:
define只做替换,不做类型检查和计算,也不求解,容易产生错误,一般最好加上一个大括号包含住全部的内容,要不然很容易出错;
const常量有数据类型,编译器可以对其进行类型安全检查;
内存占用
define只是将宏名称进行替换,在内存中会产生多分相同的备份。const在程序运行中只有一份备份,且可以执行常量折叠,能将复杂的的表达式计算出结果放入常量表
宏定义的数据没有分配内存空间,只是插入替换掉;const定义的变量只是值不能改变,但要分配内存空间。
以上就是“C++宏函数和内联函数如何使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注蜗牛博客行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
评论