[cppreference为可能的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
的结果强制转换为void
?是因为我们舍弃++i
的结果来抑制可能的编译器警告吗?如果是这样,为什么++first
也不能转换为void
?因为operator ,
隐式丢弃了它?
输入
是因为我们舍弃++ i的结果来抑制可能的编译器警告吗?
抑制警告是我所知道的将废弃表达式强制转换为void的唯一原因。
如果是这样,为什么++ first也不能强制转换为void?
大概不会对该子表达式发出任何被抑制的警告。
P.S。链接页面中链接的两个标准库实现(stdlibc ++,libc ++)都没有强制转换为void。