GCC 标准库实现中void强制转换的目的是什么?

问题描述

在GCC的stdlibc++中std::ranges::transform的实现中,为什么for循环迭代器增量有一个(void)强制转换?

for (; __first1 != __last1 && __first2 != __last2;
         ++__first1,(void)++__first2,++__result)

解决方法

这是因为在 C++ 中它是 possible to overload the comma operator。直到今天,我仍然不知道这样做的好处,但现在这并不重要。重要的是,这是可能的。

显式 void 强制转换可防止意外调用此处的重载运算符而产生意外副作用,从而产生不需要的结果。请注意单个 void 转换如何有效地防止左侧和右侧的逗号运算符被调用。