Meh*_*dad 50 c++ overriding visual-c++ c++11 visual-studio-2012
有没有办法override
在Visual C++ 2012中强制使用C++ 11 关键字?
(即如果我忘记说override
,那么我想得到一个警告/错误.)
Jon*_*ely 22
C++ 11几乎拥有你想要的东西.
最初override
关键字是较大提案(N2928)的一部分,该提案还包括强制执行其使用的能力:
class A
{
virtual void f();
};
class B [[base_check]] : public A
{
void f(); // error!
};
class C [[base_check]] : public A
{
void f [[override]] (); // OK
};
Run Code Online (Sandbox Code Playgroud)
该base_check
属性会在不使用override
关键字的情况下覆盖虚函数.
还有一个hiding
属性表示函数隐藏了基类中的函数.如果base_check
使用并且函数隐藏了一个基类而不使用hiding
它是一个错误.
但大部分提案被删除,只保留了final
和override
特征,作为"具有特殊含义的标识符"而不是属性.
VC++中有很多方法可以做到这一点,GCC也是如此.
VC++
以下是VC++中的相关警告编号:
C4263 (level 4) 'function': member function does not override any base class virtual member function
C4266 (level 4) 'function': no override available for virtual member function from base 'type'; function is hidden
Run Code Online (Sandbox Code Playgroud)
要启用这两个警告,您可以使用以下选项之一:
使用代码启用以上两个警告.
#pragma warning(default:4263)
#pragma warning(default:4266)
Run Code Online (Sandbox Code Playgroud)在项目设置> C/C++>命令行中启用以上两个警告,然后输入/ w34263/w34266.这里/ wNxxxx选项意味着在级别N中启用xxxx警告(N = 3是默认级别).您还可以执行/ wdNxxxx,它会禁用级别N中的xxxx警告.
GCC
GCC 5.1+添加了新警告suggest-override,您可以将其作为命令行选项传递-Wsuggest-override
.
铛
-Winconsistent-missing-override
然而,Clang 3.5+ 只检测基类使用覆盖而父类不覆盖的情况.你可能也想看看clang-tidy工具.