2012-12-19 83 views
3

快速的问题,是它很好的做法使用这种初始化所有“空白或空”的变量时,它并没有携带正或负的值,例如:变量初始化(C#和C++)

int value = 0; 

而不是:

int value; 

我接受的Visual Studio编译器,从我的理解,如果他们没有事先初始化,但我很好奇,在默认情况下自动初始化变量为0什么是最好的做法是和什么潜在危害(如果有的话)。

虽然我特指VS环境中的C#和C++语言,但这个问题对任何语言和编译器都是开放的。

+1

让我们坚持使用c + +和C#,我们会吗? –

+2

C++的方法是**总是**初始化变量。 –

回答

3

在程序后面初始化变量以防止未定义行为总是一个好习惯。一些后来的编译器可能会为你做这件事,但在较低的杠杆没有定义一个变量不能被编译器捕获,并可能导致一些非常痛苦的头痛。如果你有变量的大规模列表我一般是用一个大等于声明:

int a,b,c,d,g; 
a=b=c=d=g=0; //set all to zero 

它除了更大的C++理念,以始终保持有所有时间存储在您的变量的值。

1

初始化语句为int value = 0;更好,好的编程习惯有两个原因。

  1. 由于未初始化变量它从可读性的角度

  2. 它删除的问题可能更好(不是这种情况,而是一种实践,以避免在其他许多情况下问题,当需要初始化)。

7

在Visual Studio编译器,从我的理解,如果他们没有手

并不总是初始化之前自动初始化默认变量为0。

范围问题。该类的私有成员会自动分配其默认值,但本地范围的变量(即在方法中声明的)不是。 out参数不会自动分配。值和引用参数始终被赋值(它们要么传入一个值,要么声明默认值)。

C#会让你分配一个值后的声明,但将不会你引用一个未分配变量。

+0

因此,必须初始化本地范围内的任何东西。全局变量会发生什么情况,因为它们超出范围? – wilbomc

+0

在C#中,变量总是在类中声明* C#没有全局变量。 –

+0

在C++中,原始类型数据成员**不会被初始化为零。访问不会进入它。这包括指针。牢记这一点非常重要。 – juanchopanza