【C++】内联函数概念&使用时机&优缺点

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函数,当代编译会自动使用内联函数
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章