Pregunta ¿Por qué std :: transform y similar lanzan el incremento de bucle 'for' a (void)?


Cual es el proposito de (void) ++__result en el siguiente código?

Implementación para 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;
}

74
2017-07-13 16:27


origen


Respuestas:


Es posible sobrecargar operator,. Lanzando cualquiera de los operandos a void evita que se llame a un operador sobrecargado, ya que los operadores sobrecargados no pueden tomar void parámetros.


102
2017-07-13 16:31



Evita la llamada de sobrecargado operator, si hay alguna. Porque el tipo void no puede ser un argumento de una función (operador).

Otro enfoque sería insertar void() en el medio:

++__first, void(), ++__result

5
2017-07-14 14:23