我真的很喜欢 c++11 的新 override 关键字,我试图将它添加到我的代码中。如果编译器能够帮助我发现所有这些情况,那就太好了。
有什么方法可以让编译器表现得好像 override 关键字是强制的吗?我正在使用 Visual Studio 2012
例如,我希望编译器发出错误/警告:
class Base{
public:
virtual void the_virtual(){}
};
class derive:public Base{
public:
void the_virtual(){} //warning/error wanted here
};
我会从基础开始,给班级一个virtual
析构函数:编译器往往会对此发出警告。
关于实际问题,使用的可能性极小override
将成为强制性的,因为存在太多需要修补的代码。标准委员会对此类问题的普遍看法是,这是一个实施质量问题:编译器完全可以自由地warn关于各种可能有问题的声明。也就是说,您可以游说编译器供应商或静态分析器供应商针对这种情况创建警告。 ...如果您认为无法让供应商应用支票,请自行创建!检查是否有override
覆盖时的关键字virtual
函数使用,例如clang http://clang.llvm.org/相当简单。
另外,这是一个强制使用的示例override
would not work:
struct Base1 {
virtual ~Base1() {}
virtual int f() { return 0; }
};
struct Base2 {
int f() { return 1; }
};
template <typename Base>
struct Derived: Base {
int f() { return 2; }
};
int main()
{
Derived<Base1> d1;
Derived<Base2> d2;
}
在类模板中Derived
功能f()
可能是也可能不是覆盖。你不能有条件地放置override
there.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)