内联函数与宏(inline & define)
使用inline修饰函数的声明或者实现,可以使其变成内联函数
写在声明或实现都可以,建议声明和实现都增加inline修饰。
内联函数声明必须在调用语句之前。
-  作用? 编译器会将函数调用直接展开为函数体代码 
  
 原本main函数中只有一行代码,但函数体中有三行代码,在编译时就会将一行代码自动展开成三行代码。-  有啥意义呢? 在调用函数时,会开辟栈空间,函数结束后会回收栈空间。 连续调用函数就会连续开辟回收栈空间。 ——>> 内存开销较大 如果使用内联函数,编译器会自动将函数展开成函数体代码,就不存在函数调用和开辟回收栈空间,不会分配和回收内存,执行效率会变高。 ——>> 减少函数调用的开销 但相应的会增大代码体积。 
 
-  
-  使用场景: - 函数体体积不是很大
- 频繁调用的函数
 
-  注意 - 尽量不要内联超过10行代码的函数
- 不能存在任何形式的循环语句
- 不能存在过多的条件判断语句
- 有些函数即使声明为inline,也不一定会被编译器内联,比如递归函数,编译器可能拒绝内联请求
- 内联函数声明必须在调用语句之前。
 
define:
- 只是简单的字符串替换,没有类型检查
- 是在编译的预处理阶段起作用
- 可以防止头文件重复引用
- 不分配内存,给出的是立即数,有多少次使用就进行多少次替换
内联函数与宏
- 都可以减少函数调用的开销
- 对比宏,内联函数多了语法检测和函数特性(传参)
 
输出:24而不是22
因为宏是简单的文本替换,替换后
int c = ++a + ++a; 
注意:按运算符优先级来说,++ 在 + 的前面,所以先对 a 做两次 ++ 运算,然后再将 a 值相加。
 
 
 输出:22
 - ++ a = 11作为参数传入add函数,所以返回就是- 11 + 11。
- 表达式
 C++有些表达式是可以被赋值的。
  
 先计算 (a = b) ,将b赋值给 a,返回 a
 然后计算 a = 4, 将 4 赋值给 a,返回 a
 最终 a = 4, b = 2
  
 a = 1, b = 4
 C++中可以,但C中不可以。










