2017-06-19 12 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] ' –

+0

私はsizeof行に何のポイントも見ません。 'array'パラメータ名は、未使用の変数の警告を避けるために省略することができます。また 'size_t'を使用して返します。 – VTT

答えて

10

私は行の目的は静かな未使用の変数の警告であると思います。 単純に

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

この警告は、 '(void)array;でサイレントにすることもできます。 ? – VTT

+2

なぜでしょうか? :D –

+0

@VTT - 誰が知っていますか?法律上の正しいコードで警告を避けるために、ナイトな方法を考えるのは時間がかかりすぎます。 –

関連する問題