2011-11-21 118 views
4

我剛剛通讀了有關同一主題的所有搜索結果,我現在在stackoverflow中詢問,它並不真正回答我的好奇心。但是這是事情。靜態綁定和數組的動態綁定之間的區別

問題

1)據我所知,靜態綁定意味着它在編譯時設置,而且在運行過程中的存在,而動態綁定意味着它在運行時設置。

2.)所以我讀的書介紹了動態數組,它提到動態數組大小可以在運行時設置。這樣做是以這種方式完成的。

守則

int size; 
cin >> size; 
int * pz = new int [size]; // dynamic binding, size set at run time 
delete [] pz; // free memory when finished 


3)在此代碼書中提到動態數組的大小可以runtime.So中列明瞭好奇,我試試這個。

int size; 
cin >> size; 
int array[size]; 
//After the array declaraction i assign value to it to check whether it works or not. 


4)上面的代碼工作過的代碼,所以我只是好奇什麼特別之處動態數組,因爲普通的靜態數組可以做同樣的工作。

5.)這是因爲動態數組可以在運行時釋放它的內存,而靜態不能這是什麼讓它如此特別?


謝謝你花時間閱讀我的問題,你指出我做的任何錯誤。

回答

6

你用動態大小的靜態數組(稱爲一個可變長度數組,短VLA)只能感謝您的編譯語言擴展。這是一個C99的東西,它不包含在C++標準中,這意味着它不可移植。

另一個明顯的區別是,你可以將指針傳遞給動態數組別的地方,保存到某個地方,從一個函數返回它,或者換句話說,有它活得比它在創建範圍。你不能用靜態數組來做到這一點,因爲它們在其作用域的末尾被銷燬。

2
int size; 
int array[size]; 

將拋出一個編譯時錯誤說大小不是一個編譯時間常數或預期的常量表達式

當你知道數組的大小遠遠超過你的時間聲明數組像這樣

int array[5]

const int size = 100; 
int array[size]; 

否則您使用刪除[]的方法。我會建議完全避免這種結構有利於的std ::的矢量

1

早期綁定: -其中最具約束力的翻譯過程中提出,早在一個程序的處理的語言是說有早期綁定。
後期綁定: -語言具有最晚綁定延遲,直到執行時間爲止。

早期綁定: -它不夠靈活。
後期綁定: -它具有更多的編程靈活性。

早期綁定: -在該數據僅在宣告數據類型
後期綁定接受: -在該變量可以接受任何類型的數據。

早期綁定: -它檢測到正確的分配類型。
後期綁定: -在這種不正確的賦值右側類型沒有檢測到錯誤或錯誤。

早期綁定: -類型檢查必須在編譯時完成。
延遲綁定: -類型檢查必須在運行時完成。

早期綁定: -它是用戶編譯器或解釋器。
後期綁定: -對變量進行後期綁定的語言通常使用純解釋器而不是編譯器來實現。