2012-12-19 85 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