blu*_*rnd 0 c++ variables const overwrite c-preprocessor
可以#define"覆盖"一个const变量,反之亦然?或者它会导致编译器错误?
//ONE
#define FOO 23
const int FOO = 42;
//TWO
const int FOO = 42;
#define FOO 23
Run Code Online (Sandbox Code Playgroud)
FOO在两种情况下都有什么价值,42或23?
第一个会给出编译错误.从定义的角度来看,宏是可见的.
也就是说,第一个相当于:
//ONE
#define FOO 23
const int 23= 42; //which would cause compilation error
Run Code Online (Sandbox Code Playgroud)
第二个是这个:
//TWO
const int FOO = 42;
#define FOO 23 //if you use FOO AFTER this line, it will be replaced by 23
Run Code Online (Sandbox Code Playgroud)
由于宏是愚蠢的,在C++中const并且enum优于宏.请参阅我在这里的答案,其中我解释了为什么宏是坏的,const并且enum是更好的选择.