20.2.5 使用const代替#define定义常量

    const和#define都可用于定义常量,但相比#define,const有很多优势。对#define定义的符号常量,预处理器只是进行简单的字符串替换,并不对其进行类型检查,而且会与程序中定义的同名变量相冲突,如下所示。


    #define num 10; void disp() { int num; cout<<num; }

    编译时,预处理器会将disp函数中的语句“int num;”替换成“int 10”,若使用“const int num=10;”便不会出现这种问题。

    const标识符遵循变量的作用域规则,可以定义在数据块内、名称空间中或者函数外部,当定义在函数外部时,其作用域是文件作用域,即const定义的外部常量的作用域限定在本编译单元内,从定义点处到结束。

    在C++中,#define和const定义的常量都可用作数组长度的参数。总之推荐使用const代替#define来定义常量。