是否必须使用c ++ override关键字?

时间:2014-01-11 15:12:06

标签: c++ visual-studio c++11 override

我真的很喜欢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
};

1 个答案:

答案 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放在那里。