【C++复习五】inline和宏
2013-03-31 16:17
260 查看
inline函数式C++引入的,C中是没有这个概念的
这两者有相同的地方却又不同
1、普通的函数会在调用的时候有个压栈的操作,待函数执行完会pop出栈中内容继续执行,不知道这么理解对不对,希望看到的前辈们能够指正
但是inline函数和宏就不同,这两者会在调用的时候直接把代码带入到对应的位置,所以就减少了压栈的操作,提高性能
2、inline可以作为成员函数,但是宏却不行;宏可以定义变量,inline却只是用来修饰函数的,不可以用来定义变量
3、inline是一个真正的函数,会执行类型检查,返回者检查等操作,它是一个运行期的函数,而宏只是简单的带入,不会执行任何检查,是预编译期常量,就是说宏的内容会在编译前的时候就带入。
例如
#define fun(a,b) a*b; 代表了求a,b的乘积,如过a=c+d;b=x+y;那么值又会是什么呢,由于宏只是简单展开,所以结果会是c+d*x+y,并不是我们期望的(c+d)*(x+y),所以我们使用宏的时候应该尽可能的加括号,保证不会出现类似情况。
以上内容如有错误或者不完善,烦请大家指出,一起讨论,共同进步,谢谢(因为这段内容是我自己的理解,不一定正确)
这两者有相同的地方却又不同
1、普通的函数会在调用的时候有个压栈的操作,待函数执行完会pop出栈中内容继续执行,不知道这么理解对不对,希望看到的前辈们能够指正
但是inline函数和宏就不同,这两者会在调用的时候直接把代码带入到对应的位置,所以就减少了压栈的操作,提高性能
2、inline可以作为成员函数,但是宏却不行;宏可以定义变量,inline却只是用来修饰函数的,不可以用来定义变量
3、inline是一个真正的函数,会执行类型检查,返回者检查等操作,它是一个运行期的函数,而宏只是简单的带入,不会执行任何检查,是预编译期常量,就是说宏的内容会在编译前的时候就带入。
例如
#define fun(a,b) a*b; 代表了求a,b的乘积,如过a=c+d;b=x+y;那么值又会是什么呢,由于宏只是简单展开,所以结果会是c+d*x+y,并不是我们期望的(c+d)*(x+y),所以我们使用宏的时候应该尽可能的加括号,保证不会出现类似情况。
以上内容如有错误或者不完善,烦请大家指出,一起讨论,共同进步,谢谢(因为这段内容是我自己的理解,不一定正确)
相关文章推荐
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- c++复习基础要点02 虚函数与模板 与static inline是否共存
- C++复习9.面向对象编程
- C/C++知识点复习笔记18/3/4
- C++ 中 inline 的处理
- C++第一次实验(复习)
- c++ 期中考试复习
- C++每日一练(inline)
- C++知识点复习(一)
- [积累]C++复习 海大2014硕士生面试题字符串处理
- C/C++语言复习(三)void和void *
- C++内联函数(Inline)
- C++内联函数(Inline)介绍
- 关于C++中的内联函数(inline)
- 2011/10/05~10/06 c++复习与学习
- C/C++中static,const,inline三种关键字详细总结
- C++ inline和#define宏的区别
- C++复习之友元和const修饰类成员
- C++知识点随笔(三):static、const、friend、inline