我们有一个使用许多C ++ 11工具的项目,我们考虑过这个技巧,让它在C ++ 03上编译。
#ifndef USE_CPP0X
# define override
#endif
据我所知,禁止定义C ++关键字,这是合法的吗?
答案 0 :(得分:6)
这有点令人不悦,但它肯定是可能的。一个更好但不那么皱眉的变体是在所有大字母中定义宏,比如
#ifndef USE_CPP0x
# define OVERRIDE
#else
# define OVERRIDE override
#endif
然后记得在需要时使用OVERRIDE
代替override
。
答案 1 :(得分:2)
在C ++ 11及更高版本中使用'覆盖'方面更明确的是:
#if __cplusplus >= 201103L
#define OVERRIDE override
#else
#define OVERRIDE
#endif
值201103L是C ++ 11商定的标准。除非你使用古老的编译器,否则肯定会定义宏__cplusplus。