我遇到了以下代码,该代码返回C风格数组的大小。
template <typename Type, int N>
int GetArraySize(Type (&array)[N])
{
(void) sizeof (0[array]);
return N;
}
模板部分似乎已经在这个问题中解释过了。
但是,我仍然不明白sizeof
行的效用。有什么想法吗?
有人建议它是为了避免未使用变量警告,但是更简单的#pragma
可以使用,对吗?
此外,这段代码在任何情况下都有效吗?没有任何限制吗?
#pragma
不是标准语法(虽然大多数主流编译器都实现了它),但将其转换为 void 是可以的。 - Curious0[array]
is the same asarray[0]
- Pierre Emmanuel Lallemantarray
参数名称以避免未使用变量警告。此外,它应该使用并返回size_t
。 - user7860670