c++——内联函数

内联函数

C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数或内联函数

1、为什么要有内联函数

①在c中也会出现,宏看起来像一个函数调用,但是会有隐藏一些难以发现的错误。
②内联函数是C++特有的,预处理器不允许访问类的成员,也就是说预处理器宏不能用作类类的成员函数。
③内联函数就是继承了宏函数的高效.并且不会出错,还可以当成类的成员函数用

2、宏函数和内联函数的区别

①宏函数的替换是发生在预处理阶段
②内联函数的替换是发生在编译阶段
③宏函数容易出错(在c++中千万别用宏函数),内联函数不会
④内联函数和宏函数一样,都省去了调用函数的开销

3、内联函数的语法形式

inline 存储类型 数据类型 函数名(参数列表)

注意:内联函数 一般不宜太复杂,或存在循环,否则会导致程序过大 (用空间换时间)

inline void func(int a);//err

以上写法没有任何效果,仅仅是声明函数,应该如下方式来做:

inline int func(int a){
    
    
	return ++;
}

注意:编译器将会检查函数参数列表使用是否正确,并返回值(进行必要的转换)。这些事预处理器无法完成的。

#include <iostream>
// 声明内联函数
inline int add(int a, int b) {
    
    
    return a + b;
}
int main() {
    
    
    int result = add(5, 3);  // 内联函数调用
    std::cout << "Result: " << result << std::endl;
    return 0;
}

4、内联函数的优势和注意事项

优势:

①减少函数调用开销:
内联函数避免了函数调用时的栈操作和参数传递,从而减少了一部分运行时开销,尤其对于简短函数体的函数来说更加有效。

②更好的编译器优化:
内联函数的代码被插入到调用处,编译器可以更好地对整体代码进行优化,提高程序的执行效率。

③避免函数调用的副作用:
一些函数调用会产生副作用,如全局变量的修改等。内联函数避免了函数调用,也就避免了这些副作用。

注意事项:

①适用于短小函数:
内联函数适用于函数体较短的情况,过大的函数体内联可能会导致代码膨胀,反而降低性能。

②不是强制要求:
inline关键字只是对编译器的建议,编译器可以选择是否将函数内联。通常,编译器会根据函数的复杂度和频繁性来决定是否内联。

③多次定义问题:
内联函数应该在头文件中定义,而不是在源文件中。如果在多个源文件中包含了同一个内联函数的定义,可能会引发“多次定义”的编译错误。

④不能存在任何形式的循环语句

⑤不能存在过多的条件判断语句

⑥不能进行取地址操作

5、类成员函数默认编译器会将它做成内联函数

在任何类中的内部定义的函数会自动成为内联函数

猜你喜欢

转载自blog.csdn.net/qq_57737603/article/details/132438772