2011-02-17 86 views
3

可能重複:
Can someone explain this template code that gives me the size of an array?在問候數組的大小計算

嗨,我期待在這裏張貼的答案:

Computing length of array

複製在這裏:

template <typename T, std::size_t N> 
std::size_t size(T (&)[N]) 
{ 
    return N; 
} 

有人可以解釋我的意義嗎(&)?

+0

這是一個不同的問題。 – 2011-02-17 19:38:59

+1

@RobertHarvey:不,他們是一樣的,但措辭不同。這個具體地叫出&,而另一個則詢問維度,但維度由於參考而具有*完全的意義。注意:「當我通過數組時,會發生什麼?」(另一方面)直接由「'的含義(從這裏開始)表示它通過引用傳遞」。 – 2011-02-17 19:42:04

回答

7

&表示該數組通過引用傳遞。這可以防止類型腐朽爲指針。沒有通過引用傳遞你會得到衰減,並沒有關於數組大小的信息。

非模板示例:

void foo(int (&a)[5]) 
{ 
    // whatever 
} 

int main() 
{ 
    int x[5]; 
    int y[6]; 

    foo(x);   // ok 
    //foo(y);   // !incompatible type 
} 

乾杯& HTH,

2

的&意味着該陣列是通過引用來傳遞。數組無法通過值傳遞,因爲在這種情況下,它們衰減爲指向第一項的指針。如果發生這種情況,與數組類型關聯的大小信息將丟失。

它在括號中,否則就意味着該函數接受一個指向引用的指針。儘管這樣的事情在C++中不合法,但其語法與您聲明指向數組的指針是一致的。

​​3210