Fur*_*ish 6 c++ casting comma-operator
看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;
}
Run Code Online (Sandbox Code Playgroud)
我注意到我们通常看到的部分i++
(或首选++i
)由两个操作组成:
++first
(void) ++i
用逗号分隔。虽然大部分都说得通,但(void)
演员阵容对我来说似乎有点令人惊讶。我只能猜测是,有可能是超载operator ,
,是以推导型的InputIt
和Size
这将导致一些令人吃惊的副作用。这可能是原因吗?如果是,我们确定演员void
阵容完全解决了这个问题吗?
难道是这个原因吗?
处理运算符逗号的邪恶重载确实是一个很好的理由。
我没有看到其他(有效的)原因。
如果是,我们确定强制转换可以
void
完全解决该问题吗?
是的,我们不能使用重载运算符逗号void
(也不能转换为void
)。