为什么std :: transform和类似的'for'循环增量转换为(void)?

时间:2016-07-13 16:27:54

标签: c++

以下代码中(void) ++__result的目的是什么?

std :: transform的实现:

// std::transform
template <class _InputIterator, class _OutputIterator, class _UnaryOperation>
inline _LIBCPP_INLINE_VISIBILITY
_OutputIterator
transform(_InputIterator __first, _InputIterator __last, _OutputIterator __result, _UnaryOperation __op)
{
    for (; __first != __last; ++__first, (void) ++__result)
        *__result = __op(*__first);
    return __result;
}

2 个答案:

答案 0 :(得分:103)

可以重载operator,。将任一操作数强制转换为void可防止调用任何重载运算符,因为重载运算符无法获取void个参数。

答案 1 :(得分:5)

如果有的话,它可以避免调用重载的operator,。因为类型void不能是函数(运算符)的参数。

另一种方法是在中间插入void()

++__first, void(), ++__result