静态代码检查器抱怨。错误的警报?

时间:2018-10-15 23:00:49

标签: c++

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

  
    

严重性代码描述项目文件行抑制状态     警告C26495变量'aux :: system :: Dummy :: value'未初始化。始终初始化成员变量(类型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成员可能会被初始化。

2 个答案:

答案 0 :(得分:2)

  

我做错什么了吗?或者这是个错误的警报?

C26495 来说似乎是错误的肯定。

也可以找到几个类似的报告。 (Link1),(Link2

答案 1 :(得分:1)

是的,肯定是假阳性…我经常在非常相似的代码中收到此警告。解决这个问题的一种简单(尽管很不必要)的方法是在成员 declaration

中添加一个初始化括号。
const uint32_t value{ 0 };

不确定代码分析器为什么会犯此错误-可能是因为您尚未定义赋值运算符?但是,更有可能只是一个错误!

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

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

但是当我添加时:

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

在课堂上,我没有收到您的26495警告!?