zoukankan      html  css  js  c++  java
  • NO.2: 尽量以const,enum,inline 替换 #define

    1.首先#define 定义不重视作用域(scope),虽然可以#undef控制,但是不美观,还存在多次替换的问题,以及没有任何封装性.

    2.const XXX_XX,保证其常量性以及可控的作用域,如果是指针类型则 const XXXX* const ptr="hello world",也可以完美替换#defin

    3.enum hack 替换数组大小问题,和#define 一样不会导致非必要内存(只有在声明enum类型时有内存)

    4.宏函数会产生很多问题,没有对参数的各种限制,而inline可以很好的解决

    C/C++:

     1 #include <iostream>
     2 
     3 //Effective C++ NO.2
     4 #define CALL_WITH_MAX(a,b) (a>b?a:b);
     5 
     6 template <typename T>
     7 inline int CALLWITHMAX(T a,T b)
     8 {
     9     return a>b?a:b;
    10 }
    11 
    12 
    13 
    14 
    15 #define STR "Hello Wolrd"
    16 const char *const str = "Hello Wolrd";
    17 
    18 class Test
    19 {
    20 public:
    21     //enum hack
    22     enum{SIZE=20};
    23     int Array[SIZE];
    24 
    25     //旧版编译器可能需要类外初始化static,不能给数组大小赋值
    26     static int size;
    27 };
    28 
    29 int Test::size=20;
    30 
    31 
    32 
    33 
    34 
    35 int main(int argc, char **argv)
    36 {
    37     int a=2,b=1;
    38     //inline没有问题
    39     std::cout<<CALLWITHMAX(++a,b)<<std::endl;
    40     //宏函数造成的2次叠加
    41     std::cout<<CALL_WITH_MAX(++a,b);
    42     return 0;
    43 }

    注意: 对于纯常量,尽量使用const,或者enum替代

              对于形似函数的宏,尽量使用inline替换

  • 相关阅读:
    集合
    3/11
    字典
    3/10
    字符串之不常用方法
    字符串的索引和切片
    数据类型的转化
    Markdown在线编辑器
    3/9
    Django:RestFramework之-------渲染器
  • 原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/7257185.html
Copyright © 2011-2022 走看看