MSVC 19.37对if语句中类对象赋值未一致告警的技术问询
关于MSVC未检测类类型条件内赋值的问题
团队里有位同事偏好使用Yoda条件式:
if (0 == x) // 作为(x == 0)的安全替代,避免误写成(x = 0)
这种风格存在争议,反对者认为编译器可以通过持续发出警告来检测if (x = 0)这类错误模式。但MSVC对类类型的该模式无法检测到告警,示例代码如下:
struct wrapper { int x; operator int(); }; void foo(wrapper w, int x) { if (w = wrapper{}) {} // 无告警?! if (x = 0) {} // 触发警告C4706:条件表达式内的赋值 }
我已启用/Wall编译选项,IntelliSense也未检测到该问题。请问:
- 是否是操作有误导致未触发告警?
- 这是MSVC的已知Bug吗?
- 若MSVC和IntelliSense无法检测这类问题,如何通过本地工具自动标记该问题?
注:我知晓多编译器CI可以检测此类问题,但目标是实现本地检测(理想为代码检查工具)。
更新:已确认未遗漏编译选项,且已在微软开发者社区提交Bug报告。
内容的提问来源于stack exchange,提问作者Jan Schultke
相关产品推荐
相关产品推荐

