C++笔记-八股

目录

  • inline关键字内联
      • 1. 引入inline关键字的原因
      • 2. inline仅是对编译器的建议
      • 3. inline函数的定义放在头文件中
      • 4. inline与#define的区别

inline关键字内联

1. 引入inline关键字的原因

在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。
栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。

2. inline仅是对编译器的建议

inline修饰的函数能否真正内联(在调用处展开),由编译器决定,若函数体展开后太大,编译器可能不会展开; inline只适合较为简单的函数,不能包含复杂结构控制语句while和switch。

3. inline函数的定义放在头文件中

关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
inline函数的实现应放在头文件中。否则在其他源文件调用时需要重写内联函数定义。
如下风格的函数Foo 不能成为内联函数:

inline void Foo(int x, int y); // inline 仅与函数声明放在一起

void Foo(int x, int y){}

而如下风格的函数Foo 则成为内联函数:

void Foo(int x, int y);

inline void Foo(int x, int y) {} // inline 与函数定义体放在一起

4. inline与#define的区别

#define定义的宏函数使用预处理器实现,也没有参数压栈和代码生成,效率很高。
而define在使用的时候只是做简单的替换,不能进行参数的有效性检测。返回值是最后一个表达式的值,也不能强制转换成合适的类型。
inline内联的函数是一个真正的函数,编译器在调用时会检查参数类型正确性。
更详细参考: inline关键字内联、inline关键字的用法详解

你可能感兴趣的:(C++,c++,笔记,java)