pval是int*類型而不是int數組類型的左值----理解

 函數模板 min()的函數參數是一個引用 它指向了一個 Type 類型的數組  

  
      爲了匹配函數參數 函數實參必須也是一個表示數組類型的左值 下面的調用是個錯誤,因爲 pval 是 int*類型而不是 int 數組類型的左值:  

在vc++6.0中調試報錯爲:cannot convert parameter 1 from 'int []' to 'int (&)[9]',這段代碼要說明的問題是:數組作爲函數參數時退化成爲指針。如果代碼如下寫則不會出現錯誤:
 
   實際上編程的過程中,形參爲數組類型確實和指針沒什麼區別,但是上例中卻第一次調用f函數時數組就被弱化爲指針了,因此而丟失了數組長度的特性。而形參如果爲數組的引用,則可以將數組長度作爲隱含參數傳遞給函數,這樣導致的結果就是:
   Type min(Type (&r_array)[size])和Type min(Type* r_array, size_t size)是等價的。這也是爲什麼vc++6.0會報出cannot convert parameter 1 from 'int []' to 'int (&)[9]'這個錯誤的原因,因爲在數組退化爲指針後,它丟失了原數組的長度。
發佈了45 篇原創文章 · 獲贊 3 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章