VS2017中重写已弃用虚函数重复告警问题求解
VS2017派生类重写弃用虚函数告警的解决办法
问题场景
现有代码结构如下:
foo.h:
class A { [[deprecated]] virtual int F0() = 0; };
bar.h:
class B : public A { // 即使移除[[deprecated]],编译仍会触发弃用告警 int F0(); };
在VS2017编译时,无论派生类B的F0()是否标记[[deprecated]],都会触发弃用告警——原因是基类A的虚函数已标记弃用,编译器会将该属性继承给派生类的重写函数。
解决办法
方法一:精准禁用单个函数的告警
使用VS编译器的#pragma warning指令,临时禁用F0()对应的弃用告警(VS中弃用函数的告警编号为C4996),避免影响其他代码:
class B : public A { #pragma warning(push) #pragma warning(disable: 4996) int F0(); #pragma warning(pop) };
push和pop用于保存和恢复当前告警状态,确保仅禁用该函数的告警。
方法二:全局禁用告警(不推荐)
如果项目中不需要关注所有弃用函数的告警,可以在项目属性中关闭C4996:
- 右键项目 → 属性 → 配置属性 → C/C++ → 高级 → 禁用特定警告
- 输入
4996并确定
这种方法会关闭所有C4996告警,可能遗漏其他需要注意的弃用代码,因此仅在特殊场景下使用。
内容的提问来源于stack exchange,提问作者Max Yaffe
相关产品推荐
相关产品推荐

