• 内联函数引出—宏缺陷
  • 宏缺陷:
  • 必须要加括号保证运算完整
  • 即使加括号,有些运算依然与预期结果不符
  • 普通函数不会出现缺陷
  • C++提供 内联函数代替宏函数
  • 关键字 inline
  • 在函数声明和实现中同时加入关键字 inline 才称为内联
  • 在成员函数前 都隐式加了关键字inline
  • 有些特殊情况下 ,写了关键字inline也不会按照内联方式处理
  • 出现循环
  • 出现判断
  • 函数体过于庞大
  • 对函数进行取地址
  • 总结: 内联函数只是给编译器一个建议,但是编译器不一定接受这个建议,好的编译器会自己给短小的函数前加上关键字inline
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

//宏缺陷1 : 必须要加括号保证运算完整
#define  MYADD(x,y)  ((x) +(y))
void test01()
{
	int a = 10;
	int b = 20;
	int ret = MYADD(a, b) * 20;
	cout << ret << endl;
}

//宏缺陷2:  即使加了括号,有些运算依然与预期不符

#define MYCOMPARE(a,b)  (((a) < (b)) ? (a) : (b))

//普通函数 不会出现与预期结果不符的问题
void myCompare(int a, int b)
{
	int ret = a < b ? a : b;
	cout << "ret = " << ret << endl;
}

void test02()
{
	int a = 10;
	int b = 20;

	myCompare(++a, b);

	//int ret = MYCOMPARE(++a, b); //预期是 11 结果变为12   (((++a) < (b)) ? (++a) : (b))

	//cout << "ret = " << ret << endl;

}


//内联函数
//函数的声明和实现必须同时加关键字 inline  才算内联函数
//内联函数 好处  :解决宏缺陷,本身是一个函数,带来宏优势,以空间换时间,在适当的时候做展开
inline void func();
inline void func(){};
//类内部的成员函数 在函数前都隐式加了关键字 inline


int main(){

	//test01();
	test02();
	system("pause");
	return EXIT_SUCCESS;
}