/************************************************************************/
/* C++条款二:用编译器替换预编译器 */
/************************************************************************/
#include <iostream>
using namespace std;
class GamePlayer
{
private:
static const int NumTurns = 5;//常量声明式
enum {NumTurns = 5};//比较像#define,同样无法获得其地址。但const可以。
int scores[NumTurns];
};
const int GamePlayer::NumTurns;//NumTurns的定义
//注:我们无法利用#define获得一个class的专属常量,它不能够提供任何封装,也无作用域的概念
//当然,我们也可以将static初值放在定义式里面。
//当你的编译器不支持in class 初值设定的话,你就只能用enum 了。
//宏函数调用类似于内联函数的使用
template <typename T>
inline void callWithMax(const T& a, const T& b)
{
f(a > b ? a : b);//a and b 中的较大者调用函数F。
}
//不过有了const enum inline,我们对#define需求降低了,但#include等还是必需的
请记住:
1、对于单纯常量,最好以const对象或enum替换#define
2、对于形似函数的宏,或者称之为宏函数,最好改用inline函数替换#define