条款 1:尽量用 const 和 inline 而不用#define
   #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进入编译器 之前,它会被预处理程序去掉,于是 ASPECT_RATIO 不会加入到符号列表中。 如果涉及到这个常量的代码在编译时报错,就会很令人费解,因为报错信息指 的是 1.653,而不是 ASPECT_RATIO。

解决这个问题的方案很简单:不用预处理宏,定义一个常量:
    const double ASPECT_RATIO = 1.653;

除了指针所指的类型要定义成 const 外,重要的是指针也 经常要定义成 const。例如,要在头文件中定义一个基于 char*的字符串常量, 你要写两次 const:
    const char * const authorName = "Scott Meyers";

,定义某个类(class)的常量一般也很方便,只有一点点不同。要把常 量限制在类中,首先要使它成为类的成员;为了保证常量最多只有一份拷贝,
还要把它定义为静态成员:
    class GamePlayer {
    private:
      static const int NUM_TURNS = 5;    // constant declaration
      int scores[NUM_TURNS];             // use of constant
      ...
};

#define max(a,b) ((a) > (b) ? (a) : (b)) 这个语句有很多缺陷,

template<class T>
    inline const T& max(const T& a, const T& b)
    { return a > b ? a : b; }

05-11 17:20