2017-06-19 155 views
4

我遇到以下代碼,它返回C風格數組的大小。(void)sizeof(0 [array])是什麼意思?

template <typename Type, int N> 
int GetArraySize(Type (&array)[N]) 
{ 
    (void) sizeof (0[array]); 
    return N; 
} 

模板部分似乎已在this question中進行了說明。


但我仍然不明白sizeof系列的效用是什麼。有任何想法嗎? 有人建議避免未使用的變量警告,但可以使用更簡單的#pragma,對吧?

此外,這段代碼在任何情況下都會有效嗎?沒有任何限制嗎?

+0

'#pragma'不標準(雖然大部分主流編譯器都實現它),但是鑄造作廢是 – Curious

+0

'0陣列]'是一樣的'陣列' –

+0

我在sizeof行中看不到任何一點。 'array'參數名稱可以省略以避免未使用的變量警告。它也應該使用並返回'size_t'。 – VTT

回答

10

我認爲該行的目的是爲了靜默未使用的變量警告。 更簡單的將省略參數名稱

template <typename Type, int N> 
int GetArraySize(Type (&)[N]) 
{ 
    return N; 
} 
+3

那麼,這個警告可以通過'(void)數組來保持沉默......爲什麼在這裏把sizeof與花式索引? – VTT

+2

因爲爲什麼不呢? :D –

+0

@VTT - 誰知道?人們花費太多時間思考瘋狂的方法來避免合法,正確的代碼中的警告。 –