【C++】内联函数概念&使用时机&优缺点
程序员文章站
2024-03-21 13:18:46
...
1、typedef关键字
为什么要有typedef这种关键字?主要是解决什么问题?
1)typedef是一种简化复杂名称类型的手段
2)定义一种类型的别名
3)用来定义与平台无关的类型?
typedef long double myreal;
(myreal就是long double的别名)
4)在C语言中,声明struct新对象时,必须要带上struct
2、内联函数
为什么要提出内联函数?主要解决什么问题?
1)inline是C++中的关键字,可以用来定义内联函数
2)内联函数是C++中的一种特殊的函数
内联函数的特殊体现在:编译器在调用内联函数的时候,不是跟普通函数一样,而是在编译的时候,直接将函数体替换到函数调用的位置。
伪代码:
inline void foo(){
int a;
int b;
int c = a + b;
cout<<c<<endl;
}
int main(){
//调用函数
foo();
}
//实际在编译的时候,编译器会处理为:
int main(){
//用函数体去替换函数调用的代码
inline void foo(){
int a;
int b;
int c = a + b;
cout<<c<<endl;
}
}
1)为什么要引入内联函数
- 提高运行效率,减少函数带来的开销:普通函数被调用的时候,编译器会把函数信息放在堆栈中,然后存储函数变量,返回地址等信息,当函数调用完毕后,还需要释放堆栈空间。所以普通函数如果被调用的地方很多,会导致大量的内存开销。因此,引入内联函数,减少这种开销。
2)内联函数使用时机
- 一般来说,inline用于定义类的成员变量
- 内联函数适用于函数方法体小,多地方调用的函数
3)内联函数的优点
- 没有调用开销,效率高
- 编译器在调用一个内联函数的时候,首先会检查它的类型,然后保证调用正确,然后进行一系列相关检查,就像对待任何一个真正的函数一样,这也消除了隐患和局限。但是要注意,宏展开的时候是不会进行校验和检查的,安全隐患较大。
- 可以作为一个类成员函数,和其他普通类成员函数作用一样。
4)内联函数的缺点
- 内联函数体一般不宜过大,如果过大的话,编译器会放弃内联的方式,适得其反(程序体过大的话,缓存收到影响)
- 内存、缓存和CPU优化
- 对于小巧的、高频率使用的函数适合用inline函数,当代编译会自动使用内联函数
上一篇: 内联函数优缺点