在C ++ 03中定义覆盖是否合法

时间:2012-03-29 15:00:01

标签: c++ c++11 c++03

我们有一个使用许多C ++ 11工具的项目,我们考虑过这个技巧,让它在C ++ 03上编译。

#ifndef USE_CPP0X
#    define override
#endif

据我所知,禁止定义C ++关键字,这是合法的吗?

2 个答案:

答案 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。