2009-11-04 78 views
1

我有如下聲明的函數傳遞一個值的值:如何獲得通過引用在C++

void cleanValid(int valid[][4], int &size, int index); 

在實現這一功能的,我需要另設計數器等於通過了整數大小參考。我試圖做類似:

int count; 
count = size; 

如果我沒有記錯的話,當我改變指望它會改變大小的價值以及價值。儘管如此,我不能這樣做。我會如何將大小的值複製到count並保持獨立?

+1

此外,最好是寫'int count = size;',未初始化的變量是一場噩夢,如果你全部激活它們,你的編譯器應該提供一個警告。如果你想要一個更廣的範圍,例如使用一個魔術值來初始化'int count = 0;',但不要讓它處於一個未定義的值(C++不能保證內置將被初始化,儘管在調試模式下一些編譯器會做到這一點,比如VC++)。 – 2009-11-04 10:34:09

+0

IMO最好不要初始化該值,而不要使用魔術初始化值。如果您不小心最終使用了未初始化的變量,則可能會發生編譯器警告。如果你不小心使用了無意義的值,你的代碼就不會做它應該做的事情,而且你肯定不會得到任何警告。在0意味着某些情況下,應該保存爲0的顯式初始化。 – 2009-11-04 14:14:21

回答

12

不,你錯了。當你從引用讀入一個非引用變量時,你並沒有在兩者之間建立任何聯繫。您當時將擁有size的獨立副本,沒有別的。

如果你想影響size的價值,你將不得不使用一個參考吧:

int& count = size; 

/* ... */  
count= 32; /* This will change size, too. */ 
2

int count = size副本大小的值到計數。如果您在修改副本後更改計數,則尺寸將保持不變。

3

如果你不想size改變,爲什麼不傳值/ const引用?

void cleanValid(int valid[][4], int size, int index); 
在這兩個選項

void cleanValid(int valid[][4], const int &size, int index); 

確保size沒有改變 - 通過讓它的編譯器照顧。

+0

另外,在第一個示例中,您可以直接使用大小。你可以隨心所欲地做任何事情,而且你不需要將它複製到局部變量中。此外,在某些情況下,int小於參考值,因此複製可能會更少。 – Tim 2009-11-05 09:19:52