C++空大括号new初始化触发Cppcheck uninitvar报错问题
问题根因
- 该报错属于Cppcheck 1.90版本的已知误报,该版本对C++11引入的空大括号列表初始化语法的语义解析存在缺陷,错误将
new Test{}这种合法的值初始化场景识别为未初始化操作。 - 你对C++值初始化规则的理解完全正确:对于没有自定义构造函数的空类
Test而言,new Test{}和new Test()的初始化效果完全一致,均属于值初始化,只有new Test属于默认初始化,三者在你的示例代码中都不存在变量未初始化的问题。 - 你提供的测试代码本身无逻辑问题,报错完全由静态检测工具的规则适配缺失导致。
修复方案
- 优先升级Cppcheck到2.0及以上版本,该版本已经修复了空列表初始化的误报问题,你的测试代码在新版工具中不会触发该错误。
- 若暂时无法升级版本,可在执行检测时添加参数
--suppress=uninitvar:test.cpp:6屏蔽该行的特定误报,不会影响其他检测逻辑的正常运行。
内容的提问来源于stack exchange,提问作者Soup Endless
相关产品推荐
相关产品推荐

