final
在头文件中对标准版本有条件地启用 C++11 关键字是个好主意吗?我在想类似的东西:
#if __cplusplus >= 201103L
# define MY_FINAL final
#else
# define MY_FINAL
#endif
// ...
class Derived : public Base
{
public:
virtual int f() MY_FINAL;
};
我在这里有两个疑问:
- 有和没有的方法是否与
final
ABI 兼容(对我来说假设是合理的,并且快速检查g++
证实了这一点), - 当有人试图重写该方法时,C++98 编译器不会抱怨。但我相信将方法记录为不覆盖它应该可以处理这个问题。