Was ist der Zweck (void) ++__result
im folgenden Code?
Implementierung für 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;
}
static_cast<void>(++__result)
Antworten:
Es ist möglich zu überladen
operator,
. Das Umwandeln eines Operanden invoid
verhindert , dass ein überladener Operator aufgerufen wird, da überladene Operatoren keinevoid
Parameter annehmen können .quelle
addressof
in der Standardbibliothek eine reichliche Verwendung oder eine gleichwertige Verwendung anstelle von unär sehen&
.void
wird immer nur der Wert verworfen, ohne zu prüfen, welche Konvertierungsoperatoren verfügbar sind. Der einzige Weg, einen solchen Operator aufzurufen, ist ein expliziterexpr.operator void()
Aufruf.std::who_made_comma_overloadable
Es vermeidet einen überlasteten Anruf,
operator,
falls vorhanden. Weil der Typvoid
kein Argument einer Funktion (Operator) sein kann.Ein anderer Ansatz wäre das Einfügen
void()
in die Mitte:++__first, void(), ++__result
quelle