使用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
成员可能会被初始化。
答案 0 :(得分:2)
答案 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警告!?