Ответ 1
Можно перегрузить operator,
. Кастинг либо операнд void
запрещает вызов любого перегруженного оператора, так как перегруженные операторы не могут принимать параметры 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;
}
Можно перегрузить operator,
. Кастинг либо операнд void
запрещает вызов любого перегруженного оператора, так как перегруженные операторы не могут принимать параметры void
.
Он избегает вызова перегруженного operator,
, если он есть. Поскольку тип void
не может быть аргументом функции (оператора).
Другим подходом будет вставка void()
в середине:
++__first, void(), ++__result