查看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 ,
,它采用了推导出的InputIt
和Size
类型,这将导致一些令人惊讶的副作用。这可能是原因吗?如果是,我们确定转换为void
完全解决了这个问题吗?
这可能是原因吗?
处理运算符逗号的邪恶过载确实是一个很好的理由。
我看不出其他(有效的(原因。
如果是,我们确定转换为
void
完全解决了这个问题吗?
是的,我们不能用void
重载运算符逗号(也不能转换为void
(。