这里(void)first2 ++的重点是什么?

时间:2017-04-16 16:30:35

标签: c++ expression

在en.cppreference的this页面上,有一些可能实现词典比较的例子。这是基本的:

template<class InputIt1, class InputIt2>
bool lexicographical_compare(InputIt1 first1, InputIt1 last1,
                             InputIt2 first2, InputIt2 last2)
{
    for ( ; (first1 != last1) && (first2 != last2); first1++, (void) first2++ ) {
        if (*first1 < *first2) return true;
        if (*first2 < *first1) return false;
    }
    return (first1 == last1) && (first2 != last2);
}

(void)some_argument;这样的IIRC行通常用于抑制有关未使用参数的编译器警告。但是在这个函数中,使用了包括first2在内的所有参数 - 那么在for语句中写(void) first2++是什么意思?

如果InputIt1重载operator,

,是否有一些语法解决方法?

1 个答案:

答案 0 :(得分:5)

它确保使用内置的逗号运算符 - 以防万一有用户定义的重载执行意外操作。 void类型的值永远不能传递给函数,因此这里不能选择这样的重载。

想象一下,如果存在这个功能会发生什么:

void operator , (InputIt1 const &, InputIt2 const &) { launch_missiles(); } 

编辑:实际上在相关的cppreference discussion page上提到了这一点。