问题描述
在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
转换如何有效地防止左侧和右侧的逗号运算符被调用。