股票

内联与宏

摘自《C++ Primer Plus 5th》

inline工具室C++新增的特性。C语言使用预处理语句#define来提供宏—内联代码的原始实现。例如,下面是一个计算平方的宏:

  1. #define SQUARE (x) x*x

这并不是通过传递参数实现的,而是通过文本替换来实现的—X是“参数”的符号标记。

  1. a = SQUARE(5.0): is replaced by a = 5.0*5.0;
  2. b = SQUARE(4.7+7.5): is replaced by b = 4.5+7.5*4.5+7.5;
  3. d = SQUARE(c++): is replaced by d = c++*c++;

上述范例只有第一个能正常工作,可以通过使用括号来进行改进:

  1. #define SQUARE (x) ((x)*(x))

但仍然存在这样的问题,即宏不能按值传递,即使使用心得定义,SQUARE(c++)仍将c递增两次,但内联函数square()计算c的结果,传递它,以计算其平方值,然后将c递增一次。
这里的目的不是延时如何编写C宏,而是要指出,如果使用C语言的宏执行了类似函数的功能,应考虑将它们转换为C++内联函数。

打赏
原文链接:,转发请注明来源!

发表评论