在this answer,下面的代碼給出(C++ 11):什麼是(&) - 括號中的括號 - 是否代表此代碼?
template <typename T, size_t N>
constexpr size_t size_of(T (&)[N]) {
return N;
}
什麼是(&)
意味着在這種情況下?這種事情特別難以搜索。
在this answer,下面的代碼給出(C++ 11):什麼是(&) - 括號中的括號 - 是否代表此代碼?
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 (&anonymous_variable)[N]) {
return N;
}
在功能上,你實際上並不需要名變量,只是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[N]) {
return N;
}
如果陣列被賦予了名字,它會是什麼樣子:
template <typename T, size_t N>
constexpr size_t size_of(T (&arrayname)[N]) {
return N;
}
謝謝!這種模式是否有名字? – Phonon
@Phonon不是我所知道的。 – Barry
@Phonon:這是一種自古以來存在的標準語法,C沒有引用,但自從時代開始以來,數組指針類型被描述爲T(*)[N]'。用'&替換'*'是除了重點。 – AnT