1

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

#ifndef USE_CPP0X
#    define override
#endif

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

4

2 回答 2

6

这有点令人不悦,但它肯定是可能的。一个更好且不那么皱眉的变体是在所有大写字母中定义宏,例如

#ifndef USE_CPP0x
#  define OVERRIDE
#else
#  define OVERRIDE override
#endif

然后记得在需要OVERRIDE的地方使用而不是使用override

于 2012-03-29T15:09:18.717 回答
2

就 C++11 及更高版本使用“覆盖”而言,更明确的是:

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

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

于 2017-08-01T00:53:23.880 回答