2015-09-25 63 views
0

這是參考C++。這個問題我已經可以追溯到大約6個月的時候我常想,一個宣言是:聲明,定義,分配,初始化變量

int a; 

而且一個定義是:

a = 5; 

此外,認爲:

int a = 5; 

既是一種聲明,也是一種定義。

現在我已經明白過來是:

int a; 

是一個定義,不只是一個聲明。 (我不知道爲什麼)。

此外,還有一些術語,例如分配和初始化,這些術語會增加問題的術語。

所以這是我目前的理解(並請糾正任何東西):

int a; // Declaration and definition 

int a = 5 // Declaration, definition, assignation and initialisation. 

a = 5; // Initialising (if for the first time), 
      // assigning (if for subsequent times), 
      // defining (not sure about this one). 

我已閱讀關於這個主題相當多,但我仍然感到困惑。有人可以解釋到底是什麼嗎?我知道在這種情況下,存在着哲學上的爭議,就像零甚至數字一樣。哈哈,但有人可以試試嗎?謝謝。

+0

「初始化」意味着你提供一個初始值(特殊情況是,當你明確規定一個空列表,仍然算作初始化)。 –

回答

0

A 聲明可能會將一個或多個名稱引入翻譯單元或重新聲明由前面的聲明引入的名稱。

A 定義是一些specific circumstance中的聲明。 (即,具有初始化程序的聲明)。這是因爲他們必須符合One定義規則。 所有的定義都是聲明,但反之亦然。

初始化在其定義中給出變量的初始值。在其他情況下也會發生初始化(例如,函數參數傳遞)

作業用於將新值分配給已經存在的對象。

在您的具體情況

int a; // definition, default-initialization if it's local, zero-initialization otherwise 
int a = 5; // definition, copy-initiaization 
a = 5; // assignment 

此外,以下是聲明,但不是定義

extern int i; // declaration but not definition 
+0

爲什麼這個老問題出現在積極的問題中?我不是那個把它挖出來的人。 – Carousel

+0

我第一次學習時就問過這個年齡段。意義似乎相當武斷,取決於我認爲的標準。例如,在類中定義一個int是一個定義嗎?我不認爲這是一個聲明。但是在全球空間的課堂之外。 – Zebrafish