zoukankan      html  css  js  c++  java
  • 条款02:尽量以const,enum,inline替换#define

    一、概述

    尽量少用预处理器——宏替换

     

    二、细节

    1. 关于宏替换之常量

    旧版本:#define N 10;

    新版本:const int n = 10;

    比较:#define不被视为语言的一部分,记号名称N在编译器开始处理源代码之前就被预处理器移走了。

    补充:class的专属常量需要封装性,而#define不能提供封装性(它并不重视作用域)。

    2. 形似函数的宏

    旧版本:#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))

    新版本:template<typename T> inline void callWithMax(const T &a, const T &b) { f(a > b ? a : b); }

    比较:旧版本中对于调用实参时有很大的约束,而且很复杂;而inline与它的效率相似但形式容易且不易出错。

    补充:callWithMax是个真正的函数,它遵守作用域和访问规则;而你不能用宏写一个class的private成员函数。

    3. enum的成员是const的,故可作为常量表达式

  • 相关阅读:
    进程 之二
    进程
    VIM
    Linux
    编码
    Maven
    Java
    Java
    Java
    其他
  • 原文地址:https://www.cnblogs.com/xzxl/p/7843643.html
Copyright © 2011-2022 走看看