我们有一个使用许多 C++11 工具的项目,我们考虑了这个技巧以使其在 C++03 上编译。
#ifndef USE_CPP0X
# define override
#endif
据我所知,禁止定义 C++ 关键字,这合法吗?
这有点令人不悦,但它肯定是可能的。一个更好且不那么皱眉的变体是在所有大写字母中定义宏,例如
#ifndef USE_CPP0x
# define OVERRIDE
#else
# define OVERRIDE override
#endif
然后记得在需要OVERRIDE
的地方使用而不是使用override
。
就 C++11 及更高版本使用“覆盖”而言,更明确的是:
#if __cplusplus >= 201103L
#define OVERRIDE override
#else
#define OVERRIDE
#endif
值 201103L 是 C++11 商定的标准。除非您使用的是古老的编译器,否则肯定会定义宏 __cplusplus。