无法消除代码分析警告C26462,是否为VS2022预览版Bug?
问题原因分析
C26462警告来自C++核心指南Con.4规则的静态检查,你当前代码里的const auto pMoreSettingsButton修饰的是指针本身为常量,即无法修改pMoreSettingsButton变量指向的地址,但没有限制修改指针指向的CWnd实例内容,所以静态分析器检测到你后续没有修改指向的实例内容,就触发了该警告,要求你增加指向内容的常量修饰。
修复方案
方案1:调整指针常量修饰符(优先选择)
你可以将指针声明同时包含顶层const(指针本身不可改)和底层const(指向内容不可改),代码修改如下:
const auto* const pMoreSettingsButton = GetDlgItem(IDC_BUTTON_MORE_SETTINGS);
因为MFC的CWnd::GetWindowText本身是const成员函数,支持通过const指针调用,修改后即可消除C26462警告。
方案2:优化对话框对象创建逻辑
你当前代码中用std::make_unique创建模态对话框对象属于不必要的堆分配,std::make_unique不会返回空指针,所以后续的if (pDlgOther != nullptr)判断也没有意义。直接在栈上分配对话框对象即可,还可以消除你用suppress压制的C26414警告,修改后代码如下:
COtherSettingsSheet dlgOther(strCaption); dlgOther.DoModal();
方案3:确认是误判后的处理
如果你调整指针声明后仍然触发警告,或者你确实需要调用指针指向对象的非const成员函数,属于静态分析器误判的话:
- 可以临时用
__pragma(warning(suppress:26462))针对单行压制警告 - 也可以在项目代码分析规则中临时禁用C26462规则,等待后续VS版本更新修复
- 稳定复现的误判可以通过VS内置的反馈通道提交给微软团队
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

