Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:如何确保所有变量都已初始化?_C++_Initialization_Declaration - Fatal编程技术网

C++ C++;:如何确保所有变量都已初始化?

C++ C++;:如何确保所有变量都已初始化?,c++,initialization,declaration,C++,Initialization,Declaration,最近我遇到了很多关于未初始化变量的问题 在Java中,变量的默认值为null,因此如果使用未初始化的变量,则可能会引发异常。如果我理解,在C++中,变量被初始化,任何数据都被显示在内存中。这意味着程序可能会运行,甚至很难知道它有什么问题 处理这个问题的干净方法是什么?是否有一些好的编程习惯可以降低风险?在我的例子中,变量是在头文件中声明的,应该在cpp文件中初始化,这是一个使错误更容易发生的示例 thx 收到少量答案后的版本: 对不起,我的问题不够具体 我得到的答案是使用标志,让编译器了解未初

最近我遇到了很多关于未初始化变量的问题

在Java中,变量的默认值为null,因此如果使用未初始化的变量,则可能会引发异常。如果我理解,在C++中,变量被初始化,任何数据都被显示在内存中。这意味着程序可能会运行,甚至很难知道它有什么问题

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

thx


收到少量答案后的版本:

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

我得到的答案是使用标志,让编译器了解未初始化的变量,这将非常有用

但是很少有cased变量不能在开始时初始化,因为这取决于系统的行为

在头文件中

double learnedValue;
extern double learnedValue;
^^^^^^
在cpp文件中

/* 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++中,你显然可以快乐,永远不会知道有问题。或者?

您可以在声明变量的现场定义变量

您可以在声明变量的现场定义变量

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

在g++上,-Wall编译器选项将显示所有警告

在Visual studio上,可能必须使用警告级别4

此外,市场上还有一些静态代码分析工具。
是免费提供的此类工具。

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

在g++上,-Wall编译器选项将显示所有警告

在Visual studio上,可能必须使用警告级别4

此外,市场上还有一些静态代码分析工具。
c++11允许您在类内初始化变量。如果编译器还没有实现,那么构造函数初始化列表就是要检查的区域。

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

您不应该在头中定义变量(只声明它)。否则,当您在多个.cpp文件中包含标题时,将出现其他错误

在实际定义变量时,还可以给它一个初始值(如0)。在C++中,也可以推迟(局部)变量的定义,直到有一个赋值给它们的值。 在头文件中

double learnedValue;
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
...
*/

您不应该在头中定义变量(只声明它)。否则,当您在多个.cpp文件中包含标题时,将出现其他错误

在实际定义变量时,还可以给它一个初始值(如0)。在C++中,也可以推迟(局部)变量的定义,直到有一个赋值给它们的值。 在头文件中

double learnedValue;
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#可以初始化变量。但是C++没有,所以当使用指针而不初始化时,它总是抛出异常。您应该养成初始化类构造函数中所有变量的好习惯。

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

习惯于在变量定义变量初始化。在C++中,变量用初始化的任何初始化初始化。如果你让它们不确定,你就掷骰子并抓住机会(即不确定=用作评估时未定义的行为)。只需将变量定义为你想要的任何值。例如,如果声明一个
int
,则将其设置为
0
。可以使用编译器警告标志。对于eample,如果您使用的是gcc<代码> -WunRealPrime将警告您所有未初始化的变量。总是使用<代码>墙> <代码>和<代码> Wextra < /COD>,在声明时总是初始化,并且处理与代码有关联的代码时的痛苦:在定义中养成初始化变量的习惯。C++中变量是用您决定用的任何东西初始化的。如果你让它们不确定,你就掷骰子并抓住机会(即不确定=用作评估时未定义的行为)。只需将变量定义为你想要的任何值。例如,如果声明一个
int
,则将其设置为
0
。可以使用编译器警告标志。对于eample,如果您使用的是gcc
-Wuninitialized
将警告您所有未初始化的变量。始终使用
-Wall
-Wextra
构建,始终在声明时初始化,并处理与有bug的代码链接时的痛苦:)而不是使用静态或常量成员变量。其他成员变量应该在构造函数中初始化。@scones那么您如何定义常量变量?常量成员变量(我所说的)是在构造函数中定义的。静态常量成员变量在.cpp文件中定义(可能除外)