【问题标题】:What does (void) sizeof (0[array]) mean?(void) sizeof (0[array]) 是什么意思?
【发布时间】: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
  • 编译器并不是唯一需要理解代码的。命名参数更清楚地向人类读者传达信息,在这种情况下,它的目的是比传递数组。而且,一旦参数被命名,可能希望不触发编译器警告.....

标签: c++ arrays templates


【解决方案1】:

我认为该行的目的是使未使用的变量警告静音。 更简单的是省略参数名称

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

【讨论】:

  • 好吧,这个警告也可以用(void) array; 来消除,为什么要把 sizeof 和花哨的索引放在那里?
  • 因为为什么不呢? :D
  • @VTT -- 谁知道呢?人们花了太多时间去想一些疯狂的方法来避免在合法、正确的代码中出现警告。
猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2023-02-11
  • 2011-11-19
  • 1970-01-01
  • 2016-12-03
  • 2019-12-08
  • 1970-01-01
相关资源
最近更新 更多