内联和宏

内联和宏

概念

内联函数:以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。
:定义宏又成为宏替换,以“#define 标识符 字符串”的格式对字符串进行替换。宏常量的定义格式为“const 类型 名=…”,可定义为静态成员,保证常量仅一份拷贝。

inline int ADD(int left,int right){return left+right;}
const int a=10;//这里a在c++中是常量,C语言中是变量。
//这里static若在类中只是一个声明,一定要在类外定义
class GamePlayer
{
private:
	static const int NUM=5;//声明
	int Player[NUM];
};
const int GamePlayer::NUM;//定义
//若使用旧编译器可能无法在声明中赋值,可以在定义中赋值
#define MAX 100;
//在c++中尽量是编译器不用预处理,如此例,当编译器
//报错时只报100,符号名MAX被预处理去掉,难以跟踪
#define max((a)>(b)?(a):(b))
//将max写为内联函数
template<class T>
inline const T& max(const T& a,const T& b)
{ return a>b?a:b;}

内联函数的特性

  • 在函数编译期间在调用位置使用内联函数展开,以空间换时间。代码很长或者有循环/递归的函数不适宜作为内联函数使用。
  • inline仅仅是对函数的建议,可能会被优化。
  • 被inline所修饰的话,只能在本文件中使用。

如何明智地使用内联?

宏的优缺点

优点:

  • 增强代码的复用性。
  • 提高性能。
    缺点:
  • 不方便调试宏。(因为预编译阶段进行了替换)
  • 导致代码可读性差,可维护性差,容易误用。
  • 没有类型安全的检查 。

与正常使用函数区别

1.函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存 。
2.宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。
3.宏、内联展开会使源程序变长,函数调用不会 。

发布了39 篇原创文章 · 获赞 4 · 访问量 1144

猜你喜欢

转载自blog.csdn.net/qq_41403559/article/details/103355361
今日推荐