(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++ 规范以最模糊的方式陈述显而易见的事情的方式:)。
在 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++ 规范以最模糊的方式陈述显而易见的事情的方式:)。