C++中使用模板獲取數組長度時,數組名前的那個&是什麼意思呢?
07-10
我想在函數裡面獲取數組的長度,類似這樣
但是這樣寫會報錯,我寫成下面這個樣子之後就可以用了
template&
void func(int A[N]){
cout &<&< N &<&< endl; }
template&
void func2(int (A)[N]){
cout &<&< N &<&< endl; }我的疑問是這裡的 "",是代表什麼呢?懇請各位大大解答下疑惑。
我使用的是VS2013。
這一個問題和前段時間一位朋友私信問我的問題很像,只是他的問題是模板如何區分出指針和數組。所以,其實這裡的關鍵是如何防止數組被轉化為指針。
而這裡的int (A) [N]其實就是防止arr(假如有個名叫arr的int數組)作為參數傳遞時被轉為int*,因為數組是不能值傳遞的,於是以引用的方式就改變了值傳遞的特點,變為引用傳遞,也就不會轉為int*了。剛才試了一下,前一種寫法,顯式實例化函數是沒有問題的: int a[3] = { 1, 2, 3 }; func&<4&>(a);但是如果隱式實例化的話,就出錯了func(a);
而第二種寫法,隱式實例化正常。
int (A)[N]
表示對 int[N]數組的引用。
int (*A)[N]同理。數組引用,防止退化為指針。sizeof(A) / sizeof(A[0])就可以取數組長度,殺雞焉用牛刀。
數組只有在 sizeof,取地址,和引用的時候不會退化成指針
數組的值傳遞,傳過來就是指針了,引用傳遞才能保持數組狀態,
推薦閱讀:
※c++ ,如何按照不同的要求調用標準庫sort函數排序?
※路徑追蹤中菲涅爾反射錯誤的問題?
※用一年時間如何能掌握 C++ ?
※給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200。怎麼寫出程序?
※既然 C++ 是 C 的超集,為什麼還是有不少人認為 C++ 不如 C?
TAG:C |