【发布时间】:2015-10-02 01:50:23
【问题描述】:
我注意到几个影响很大的“未初始化标量变量”类型的 Coverity(静态分析工具)错误。其中很多只是未初始化的整数。
将它们初始化为零与默认情况下 C++ 所做的有什么不同吗?
【问题讨论】:
-
我对这个问题进行了编辑以重新关注 C++。我主要在 C# 代码库中工作,但这些问题都在 C++ 代码中,抱歉之前不够清晰。
-
嗯,int 是 c++ 和 C# 中的值类型,它们使用 X 字节的 ram,所有 0 位,它们都是 0。所以无论你是否初始化它们,在内存中它们仍然是 0 .
-
它们是否被零初始化取决于它们的存储类型(静态或自动)以及它们的初始化方式。如果您发布完整的代码示例,可能会更容易回答。
-
我无法发布任何代码示例(生产代码、保密协议、IP 等)——否则我会。我的很多挣扎都在问自己,“是否有一个安全/良好的默认值可以将 int 设置为?”。如果设置为 0 会发生什么?有时我发现没有好的默认情况,或者它可能会非常非常罕见地走上一条即使没有初始化也没有设置的路径。那么它只是不值得将它初始化为一个可能不是一个好的默认值。也就是说,我不希望这个问题沿着设计路径走,以确保它是一个清晰简洁的问题。
-
@PerryCampbell 问题是从未初始化的变量中读取是未定义的行为。因此,只要您在阅读之前将值设置为某个值,就可以了。