尽量使用内联函数替代宏函数

  宏函数看起来像函数,却不会带来函数调用的额外开销,但是宏函数也有其弊端,例如:

  #define  CALL_MAX_FUN(a, b)  fun((a) > (b) ? (a) : (b))

  int a = 5, b=0;

  CALL_MAX_FUN(++a, b);              //a自增2次

  CALL_MAX_FUN(++a, b+10);        //a自增1次

  同样的调用,竟然会因为参数的不同,导致a的结果值不同。

  

  所以尽量使用内联函数来替代宏,内联函数由于其内链接的属性,可以在头文件中定义,并且被多个编译单元引用。另外内联函数也不会带来函数调用的额外开销。另外内联函数是真正的函数,它遵守作用域和访问规则。

  template<typename T>

  inline void CallMaxFun(const T& a, const T& b)

  {

    f( a > b ? a : b);

  }

 

posted @ 2019-10-13 22:14  落影无痕  阅读(881)  评论(0编辑  收藏  举报