“(void)sizeof(0 [array])”是什么意思?

6
我遇到了以下代码,该代码返回C风格数组的大小。
template <typename Type, int N>
int GetArraySize(Type (&array)[N])
{
    (void) sizeof (0[array]);
    return N;
}

模板部分似乎已经在这个问题中解释过了。


但是,我仍然不明白sizeof行的效用。有什么想法吗? 有人建议它是为了避免未使用变量警告,但是更简单的#pragma可以使用,对吗?

此外,这段代码在任何情况下都有效吗?没有任何限制吗?


#pragma 不是标准语法(虽然大多数主流编译器都实现了它),但将其转换为 void 是可以的。 - Curious
0[array] is the same as array[0] - Pierre Emmanuel Lallemant
我认为sizeof行没有意义。可以省略array参数名称以避免未使用变量警告。此外,它应该使用并返回size_t - user7860670
编译器不是唯一需要理解代码的人。使用命名参数可以更清晰地向人类读者传达信息,例如表明意图传递一个数组。一旦参数被命名,可能希望不触发编译器警告..... - Peter
1个回答

10

我认为这行代码的目的是为了消除未使用变量的警告。 最简单的方法是省略参数名称。

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

3
这个警告也可以用(void) array;来消除,为什么要在那里使用带有复杂下标的sizeof呢? - user7860670
2
为什么不呢?:D - Andrejs Cainikovs
@VTT -- 谁知道呢?人们花费太多时间想出疯狂的方法来避免合法、正确代码中的警告。 - Pete Becker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接