为什么在逗号分隔符上下文中将预增量的结果强制转换为void



查看std::for_each_n的可能实现:

template<class InputIt, class Size, class UnaryFunction>
InputIt for_each_n(InputIt first, Size n, UnaryFunction f)
{
for (Size i = 0; i < n; ++first, (void) ++i) {
f(*first);
}
return first;
}

我注意到,我们通常看到i++(或首选++i(的部分由两个操作组成:

  • ++first
  • (void) ++i

用逗号分隔。虽然大多数都是有道理的,但(void)的演员阵容对我来说似乎有点令人惊讶。我所能猜测的是,可能是一个过载的operator ,,它采用了推导出的InputItSize类型,这将导致一些令人惊讶的副作用。这可能是原因吗?如果是,我们确定转换为void完全解决了这个问题吗?

这可能是原因吗?

处理运算符逗号的邪恶过载确实是一个很好的理由。

我看不出其他(有效的(原因。

如果是,我们确定转换为void完全解决了这个问题吗?

是的,我们不能用void重载运算符逗号(也不能转换为void(。

相关内容

最新更新