在C++03中定义重写合法吗

Is it legal to define override in C++03

本文关键字:重写 定义 C++03      更新时间:2023-10-16

我们有一个项目使用了许多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及以上版本中使用"override"更明确的方法是:

#if __cplusplus >= 201103L
#define OVERRIDE override
#else
#define OVERRIDE
#endif

值201103L是为C++11商定的标准。除非您使用的是古老的编译器,否则宏__cplusplus肯定会被定义。