(void)r++ 输入迭代器的要求

(void)r++ requirement of input iterator

24.2.3 Input iterators 下,C++ 标准将输入迭代器的要求之一指定为表达式 (void)r++ 等同于 (void)++r.

您也可以在 cppreference 看到这个。

那个表情是什么?这个要求有什么意义?为什么需要它?

它看起来像是一个 C 风格的强制转换,以取消 r++++r 的结果,但我认为这不是它的真实面目。也就是说,稍微离题一下,我似乎可以在 class 中定义一个 void 转换运算符。 gcc 和 clang 都编译它,但 clang 给出警告:

warning: conversion function converting 'C' to 'void' will never be used

它是 void 的 C 风格转换。标准的意思是说 r++++r 如果不使用它们的 return 值,则它们必须等效,即它们具有相同的副作用。

这基本上意味着迭代器的预增量或 post 增量应产生相同的效果,尽管返回值可能(并且在一般情况下会)不同。

这只是 C++ 规范以最模糊的方式陈述显而易见的事情的方式:)。