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

dod*_*god 5 c++ iterator for-loop std-ranges

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

for (; __first1 != __last1 && __first2 != __last2;
         ++__first1, (void)++__first2, ++__result)
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 8

这是因为在 C++ 中可以重载逗号运算符。直到今天,我仍然不知道这样做的好处,但现在这并不重要。重要的是,这是可能的。

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