我真的很喜欢c ++ 11的新覆盖关键字,我试图将它添加到我的代码中。如果编译器可以帮助我发现所有这些情况,那将是很好的。
有没有办法让编译器的行为就像override关键字是必需的一样?我正在使用visual studio 2012
例如,我希望编译器发出错误/警告:
class Base{
public:
virtual void the_virtual(){}
};
class derive:public Base{
public:
void the_virtual(){} //warning/error wanted here
};
答案 0 :(得分:2)
我将从基础开始,给类virtual
析构函数:编译器倾向于警告。
关于实际问题,override
的使用极不可能是强制性的,因为存在太多需要修补的代码。标准委员会对这些问题的一般看法是,它是实施质量问题:编译器完全可以警告关于各种可能有问题的声明。也就是说,您游说编译器供应商或静态分析器供应商为此情况创建警告。 ...如果您认为可以让供应商应用支票,请自行创建!使用例如clang覆盖override
函数时检查是否存在virtual
关键字非常简单。
此外,这是一个强制使用override
工作的示例:
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
放在那里。