为什么std :: transform和类似的'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; }
有可能超载operator,
。 将任一操作数转换为void
防止重载操作符被调用,因为重载操作符不能使用void
参数。
它避免了重载operator,
调用operator,
如果有的话。 因为void
types不能是一个函数(操作符)的参数。
另一种方法是在中间插入void()
:
++__first, void(), ++__result