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

标签 c++ for-loop iterator std-ranges

在执行 std::ranges::transform在 GCC 的 stdlibc++ 中,为什么 for循环迭代器增量有 (void) throw ?

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

最佳答案

这是因为在 C++ 中它是 possible to overload the comma operator .直到今天,我仍然不知道这样做的好处,但现在这并不重要。重要的一点是它是可能的。
显式 void cast 可以防止意外调用重载运算符带来的意外副作用,以及不需要的结果。请注意如何单个 void cast 有效地防止了左侧和右侧的逗号运算符被调用。

关于c++ - GCC 标准库实现中(void)强制转换的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67904143/

相关文章:

c++ - 为一个项目使用超过 1 个代码文件有什么好处? (C++)

c++ - C/C++ 从 wint_t 打印英镑符号

用于套接字的 C++ 迭代器外观

c++ - C++ STD::List:遍历列表的麻烦

c++ - 通过 C++ 中的标准迭代器将基类转换为派生类

c++ - 是否为派生类生成移动构造函数/赋值运算符

c++ - 自动收报机中断会干扰硬件中断吗?

java - Java中for循环之前或内部的初始化

windows - FOR 循环将每次迭代用相同的前缀分组在一行中

for-loop - 重新启动 do 循环