Подтвердить что ты не робот

Почему std:: transform и аналогичные приращения для цикла for for (void)?

Какова цель (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;
}
4b9b3361

Ответ 1

Можно перегрузить operator,. Кастинг либо операнд void запрещает вызов любого перегруженного оператора, так как перегруженные операторы не могут принимать параметры void.

Ответ 2

Он избегает вызова перегруженного operator,, если он есть. Поскольку тип void не может быть аргументом функции (оператора).

Другим подходом будет вставка void() в середине:

++__first, void(), ++__result