2014-02-25 63 views

回答

1

是的,如果可能的話,一旦創建變量就始終初始化變量是一種非常好的習慣。根據我的經驗,我發現不僅將這個規則應用於基元,而且還將物體本身應用。

當然也有例外,但將它們當作是例外。

如果你有說,你需要執行一些類型的操作的數字序列,你應該確保他們都有一些值分配。如果您嘗試對未初始化的變量執行任何操作,您的程序將會崩潰。但是,如果您在創建時爲它們分配所有值,例如0或1,那麼當您的程序仍然存在嚴重問題時,調試將變得更加容易。

通常情況下,您可以通過在創建時初始化代碼來使代碼更好。例如,我正在製作一個瓷磚地圖編輯器,這當然需要瓷磚。當地圖被創建時,它將初始化「x」個地塊。我沒有把它們留給未定義的。除此之外,在任何情況下,我都無法以任何方式使用它們。不在現場初始化它們就沒有任何意義。

您可能也碰到過指針,但我也會提及它們。總之一個指針是一個變量,它指向一個變量。如果你嘗試使用沒有指向某個東西的指針,那麼會出現嚴重的問題。

指針指南 1。)如果你不打算給指針分配一個變量(或者分配一些東西),那麼一定要分配一個變量NULL 2.)如果你不確定變量是否指向某個東西,那麼在嘗試之前檢查它是否仍爲NULL使用它。 3.)如果你知道指針會指向肯定的東西會更好

2

您確實給i一個有效的值,但它沒有被初始化,它被賦值。

int i; //uninitialized 
i = 10; //assignment 

雖然

int i = 10; //initialized 
3

這本書是給很好的建議:你應該爲你,如果你可以創建他們儘快初始化變量。將它初始化並沒有錯,但它很危險,因爲在給它賦值之前可能會意外地使用它。這給出了未定義的行爲,並可能導致難以發現的錯誤和沮喪。

+0

編譯器通常也可以幫助你。 – chris

+0

@chris:確實;應該總是切換編譯器警告,他們經常會發現這樣的錯誤。但是他們並不是100%可靠的,所以培養避免錯誤的習慣也是一個好主意。 –

1

我假設你正在談論局部變量,因爲賦值語法不能在函數外工作。儘管編譯器足夠聰明以同樣的方式處理這兩個語句,但第二種方法(即int i = 10)更具可讀性。

從該聲明必須與初始化一起規則唯一的例外是當你需要使用的變量是初始分配外範圍:

// It does not make sense to initialize i here, because no matter what its initial value is, 
// the loop below will make an unconditional assignment to it. 
int i; 
do { 
    cout << "Please enter a number (zero exits the program)" << endl; 
    cin >> i; 
} while (i != 0); 

在其他情況下,你應該遵循規則並提供初始化作爲聲明的一部分。