2012-05-29 61 views
2

在一些地方,我看到聲明如下聲明一個const變量作爲參考

const int &var1; 
extern int & var2; 

這些變量定義在別處的變量。我一直認爲,當你聲明一個變量的引用時,你可以在同一個地方綁定對該變量的引用。我在這裏錯過了一些東西。當沒有限定符時(例如const或extern),我還沒有看到如上所述的引用。

+3

這些是全局變量,局部變量(在一個函數)或類成員變量?將類成員變量作爲引用常見,並在構造函數初始化程序列表中初始化它們。 –

+0

這些是類成員變量。這種風格有什麼特別的優勢?是否有可能聲明所有這樣的類成員變量或有任何限制? – polapts

回答

2

變量的實際聲明,讓它成爲引用或指針或正常變量,與變量的類型無關。

即使在你的例子中你有變量的引用,這意味着什麼都沒有關係到它們被初始化的地方。有一個引用是有用的,因爲你從另一個變量賦值並且實際上可以將它們作爲指針使用,而不必關心引用它,但僅此而已,它是一個像其他任何變量一樣的變量。

+0

除非您不能默認初始化引用或分配給它。因此,如果它們是數據成員,那麼它們在初始化的位置有一些限制。 – juanchopanza

+1

「變量的實際聲明,讓它成爲引用,指針或正常變量,與變量的類型無關。」 - 除了聲明指定類型的事實之外。 –

+0

當然,一個引用必須被初始化,因爲它是一個引用。我的意思是,參考初始化的限制與聲明的範圍無關。一個引用必須在一個代碼塊中被初始化,這個代碼塊在一個與tomthe聲明相關的上下文中實際執行,例如一個構造函數。 – Jack

6
const int &var1; 

是,如果不是classstruct的一部分是非法的。如果是,它必須在構造函數初始化列表中初始化。

它是合法的原因是因爲該變量在該類的對象被創建之前不存在。所以沒有任何參考,因爲沒有提及的內容。

1
int main() 
{ 
    const int &var1; 
} 

prog.cpp: In function ‘int main()’:

prog.cpp:4: error: ‘var1’ declared as reference but not initialized

prog.cpp:6: error: assignment of read-only reference ‘var1’

編輯:正如其他人說,這可能是class一部分,並在構造函數初始化