【发布时间】:2017-06-19 09:28:08
【问题描述】:
我遇到以下代码,它返回 C 样式数组的大小。
template <typename Type, int N>
int GetArraySize(Type (&array)[N])
{
(void) sizeof (0[array]);
return N;
}
模板化的部分好像已经在this question中解释过了。
但是,我仍然不明白sizeof 行的用途是什么。有任何想法吗?
有人建议是为了避免未使用的变量警告,但可以使用更简单的#pragma,对吧?
此外,这段代码在任何情况下都有效吗?没有限制吗?
【问题讨论】:
-
#pragma不是标准的(虽然大多数主流编译器都实现了它),但是强制转换为 void 是 -
0[array]与array[0]相同 -
我看不到 sizeof 行的意义。
array参数名称可以省略以避免未使用的变量警告。它还应该使用并返回size_t。 -
编译器并不是唯一需要理解代码的。命名参数更清楚地向人类读者传达信息,在这种情况下,它的目的是比传递数组。而且,一旦参数被命名,可能希望不触发编译器警告.....