c++:如何确保所有变量都被初始化

C++ : how to make sure all variables are initialized?

本文关键字:变量 初始化 确保 何确保 c++      更新时间:2023-10-16

最近我在一个未初始化的变量上遇到了很多麻烦。

在Java中,变量的默认值为null,因此当使用未初始化的变量时可能会抛出异常。如果我没理解错的话,在c++中,变量是用内存中的任何数据初始化的。这意味着程序很可能会运行,甚至很难知道它有什么问题。

处理这个问题的干净方法是什么?是否有一些好的编程习惯可以降低风险?在我的例子中,变量是在头文件中声明的,应该在cpp文件中初始化,这是一个更容易出错的例子。

thx


收到几个答案后的版本:

对不起,我的问题不够具体。

我得到的答案是使用flag来通知编译器未初始化的变量将是有用的。

但是有一些罕见的变量不能在开始时初始化,因为这取决于你的系统的行为。

头文件

double learnedValue;

/* code that has nothing to do with learnedValue
...
*/
learnedValue = a*b*c; // values of a, b and c computed in the code above
/*code making use of learned value
...
*/

现在发生的事情是忘记了"learnedValue=a*b*c"这一行。

但是程序运行得很好,只是用声明时内存中的值初始化了learnedValue的值。

在Java中,这样的错误不是问题,因为使用习得值的代码很可能崩溃或抛出异常(至少您知道哪里出错了)。

在c++中,你显然可以很高兴,根本不知道有问题。div或?

请确保在编译程序时设置了适当的警告级别。当使用未初始化的变量时,编译器会发出适当的警告。

在g++中,-Wall编译器选项会显示所有警告。

在Visual studio中,您可能必须使用警告级别4。

另外,市场上也有一些静态代码分析工具。

你不应该在头文件中定义变量(只能声明)。否则,当你在几个。cpp文件中包含头文件时,你会得到其他错误。

当你真正定义一个变量时,你也可以给它一个初始值(比如0)。在c++中,延迟(局部)变量的定义也是很常见的,直到你有一个值可以分配给它们。

在头文件

extern double learnedValue;
^^^^^^

cpp文件

double learnedValue = 0;
/* code that has nothing to do with learnedValue
...
*/
learnedValue = a*b*c; // values of a, b and c computed in the code above
/*code making use of learned value
...
*/

你可以在声明变量的地方定义它们

c++11允许在类内部初始化变量。如果编译器还没有实现,那么构造函数初始化列表就是要检查的区域。

c#可以初始化这个变量。但是c++不是,所以当使用指针时没有初始化,它总是抛出异常。您应该养成在类构造函数中初始化所有变量的好习惯。