内联函数与宏定义

久未见 提交于 2019-12-17 02:54:35

内联函数与宏定义

我们知道,在调用函数的过程中是使用栈进行的调用,调用栈比较消耗内存,所以我们便想通过使用内联函数或者是宏定义来达到在减小内存的情况下进行函数调用的效果。
1.宏定义
宏定义是要先通过预处理的,优点是消耗内存小(比起栈方法调用函数宏定义是直接插入),缺点是宏定义的预处理只是简单地文本置换(可能会出现如下代码的问题)。

#include <iostream>
#define SUM 3+4
using namespace std;


int main() {
	cout << SUM * SUM << endl;
	return 0;
}


结果本应该是49,可是由于宏定义是进行的简单地进行文本替换,也就变成了
3+4*3+4 = 19
在这里插入图片描述

2.内联函数
想要减小内存的开销,又想避免宏定义容易出现的问题,那么内联函数就是一个不错的选择。
内联函数是在通过编译器进行判断的,加上inline 只是给编译器一个建议,让编译器考虑把该函数改成内联函数,但是如果函数本身过于复杂,就算加上了inline,编译器也不会将函数改为内联的。

放在类中的函数编译器都默认加上inline

class Base {
public:
	//构造函数
	Base() {}
	//析构函数
	~Base() {}

	//声明f函数
	void f() {
		cout << "This is function f" << endl;
	}
};

内联函数的使用方法

  1. 直接在类中定义好函数,让编译器帮忙加上inline.
class Base {
public:
	//构造函数
	Base() {}
	//析构函数
	~Base() {}

	//声明f函数
	void f() {
		cout << "This is function f" << endl;
	}
};
  1. 一般来说会将头文件和源文件分开写,当函数在类中声明不加liline,在类外定义时需要加inline,因为在类外编译器无法判断这个函数是否是内联。
class Base {
public:
	//构造函数
	Base() {}
	//析构函数
	~Base() {}

	//声明f函数
	void f() {}
};

//定义f函数
inline void Base::f() {
	cout << "This is function f" << endl;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!