c/c++面试19-22----inline的那些事儿

19 为什么引入内联函数

  a:宏定义为什么效率高

   通常替代c语言中表达式形式的宏定义来解决程序函数调用问题,使用的是预处理器实现,没有参数压栈等到做。

  缺点;

    (1) 仅仅进行简单的替换,不能进行参数的有效性检查

    (2)返回值不能被强制转换为可以转换的合适类型

  b:inline推出的目的

    消除宏定义的缺点同时继承了其优点

20 为什么inline能很好的取代表达式形式的预定义

  (1) 函数代码被放入符号表,使用的时候直接替换(就像宏一样的展开),没有调用的开销

  (2) 是一个真正的函数,调用的时候首先检查安全性,消除隐患

  (3)可以作为类的成员函数

21 为什么不把所有的函数定义成内联函数

  (1) 内联是以代码复制为代价,只是省去了函数调用的开销。

  (2)每一次使用内联函数调用都会复制代码,代码量大消耗更多的内存空间

  下面的集中情况最好不使用内联:

    a:函数代码比较长

    b:函数体有循环,这样可能执行函数体内代码比调用的开销大

22 内联函数与宏的区别

  (1)内联函数在编译的时候展开,宏是预编译展开

  (2)编译的时候,内联函数可以直接嵌入到目标代码中,而宏只是简单文本替换

  (3)宏不是函数,inline函数

  (4)内联函数可以完成诸如类型检测,语句是否正确等便宜功能,宏没有

------->>>>好了 明天应该开始学习引用和指针了,加油!

原文地址:https://www.cnblogs.com/lanjianhappy/p/7920673.html