gpt4 book ai didi

c++ - 强制使用 c++ override 关键字?

转载 作者:行者123 更新时间:2023-11-30 04:09:41 24 4
gpt4 key购买 nike

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

最佳答案

我会从基础开始,为类提供一个虚拟析构函数:编译器往往会对此发出警告。

关于实际问题,override 的使用不太可能是强制性的,因为存在太多需要修补的代码。标准委员会对此类问题的普遍看法是,这是一个实现质量问题:编译器完全可以警告各种可能有问题的声明。也就是说,您会游说编译器供应商或静态分析器供应商针对这种情况创建警告。 ...如果您认为您不能让供应商应用支票,请自己创建!使用例如 clang 覆盖 virtual 函数时检查是否有 override 关键字相当简单。

此外,这是一个强制使用 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 放在那里。

关于c++ - 强制使用 c++ override 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21063922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com