可以#define
“覆盖”一个const变量,反之亦然?或者它会导致编译错误吗?
//ONE
#define FOO 23
const int FOO = 42;
//TWO
const int FOO = 42;
#define FOO 23
FOO在这两种情况下都有什么价值,42或23?
答案 0 :(得分:8)
第一个会给出编译错误。从定义的角度来看,宏是可见的。
即,第一个相当于:
//ONE
#define FOO 23
const int 23= 42; //which would cause compilation error
第二个是这个:
//TWO
const int FOO = 42;
#define FOO 23 //if you use FOO AFTER this line, it will be replaced by 23
由于宏很笨,所以在C ++中const
和enum
比宏更受欢迎。请参阅我的回答,其中我解释了为什么宏不好,const
和enum
是更好的选择。