静态代码检查器抱怨.虚惊一场?

Static code checker complaining. False alarm?

本文关键字:一场 检查 代码 静态      更新时间:2023-10-16

使用 VS2017 社区,当我编译以下代码时,它会发出来自静态代码检查器的警告:

严重性代码说明项目文件行抑制状态 警告 C26495 变量"aux::系统::D ummy::值"未初始化。始终初始化成员变量(类型 .6(。 80 活动

我做错了什么还是虚惊一场?

在这里,导致此问题的代码(减去它周围的命名空间...

class Dummy
{
const uint32_t value;
public:
Dummy() = delete;
Dummy( const Dummy& other )
: value{ other.value }
{}
explicit Dummy( uint32_t v)
: value{ v }
{}
};

我不明白为什么value成员可以不初始化。

我做错了什么还是虚惊一场?

这似乎是C26495上的误报。

还可以找到一些类似的报告。(链接 1(, (链接 2(

是的,绝对是误报...我经常在非常相似的代码中收到此警告。一种简单(尽管令人讨厌的不必要的(解决方法是在成员声明中添加初始值设定项大括号:

const uint32_t value{ 0 };

不确定为什么代码分析器会犯这个错误 - 可能是因为你没有定义赋值运算符?不过,更可能只是一个错误!

编辑:在VS2019(社区(中,您的代码给出:

warning C4626:  'Dummy': assignment operator was implicitly defined as deleted

但是当我添加:

Dummy& operator = (Dummy& rhs) = delete;

到班级,我没有得到你的26495警告!?