2015-06-13 136 views

回答

10

這是速記的是這樣的:

template <typename T, size_t N> 
constexpr size_t size_of(T (&anonymous_variable)[N]) { 
    return N; 
} 

在功能上,你實際上並不需要名變量,只是N模板扣 - 所以我們可以簡單地選擇忽略它。圓括號在語法上是必要的,以便通過引用傳遞數組 - 您無法通過值傳遞數組。

+0

謝謝!這種模式是否有名字? – Phonon

+0

@Phonon不是我所知道的。 – Barry

+3

@Phonon:這是一種自古以來存在的標準語法,C沒有引用,但自從時代開始以來,數組指針類型被描述爲T(*)[N]'。用'&替換'*'是除了重點。 – AnT

4

這是傳遞一個數組作爲參數參照:

template <typename T, size_t N> 
constexpr size_t size_of(T (&)[N]) { 
    return N; 
} 

正如你不能傳遞一個這樣的數組:

template <typename T, size_t N> 
constexpr size_t size_of(T[N]) { 
    return N; 
} 

如果陣列被賦予了名字,它會是什麼樣子:

template <typename T, size_t N> 
constexpr size_t size_of(T (&arrayname)[N]) { 
    return N; 
} 
+0

爲什麼中間塊非法? – Phonon

+0

@Phonon數組不能通過引用傳遞;它們是通過價值傳遞的。 – Joe

相關問題