为什么第二个变量作为引用和const传递

时间:2012-08-14 14:26:57

标签: c++

为什么first不作为引用和const传递?

template <typename Iterator>
    int distance(Iterator first, const Iterator & last) {
    int count;
    for ( ; first != last; first++)
        count++;
    return count;
}

4 个答案:

答案 0 :(得分:7)

它不能是const,因为它在函数内部递增,并且它不会被引用传递,因为调用者可能没有意义。

此外,如果它是非const引用,则不可能使用临时引用。例如,您将无法做到:

std::vector<int> v{ 1, 2, 3, 4 };
auto distance = std::distance(v.begin(), v.end());

答案 1 :(得分:6)

因为它在函数内部被更改,所以它不能是const。但是,您不希望其状态(其值)在函数外部更改,因此它通过值传递(而不是引用)。

答案 2 :(得分:4)

更好的问题是为什么第二个参数是由const引用传递的,因为标准中定义的签名是:

template <typename Iterator>
typename iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);

也就是说,都是按价值。

答案 3 :(得分:1)

因为如果我们不想修改来电者的价值,我们无论如何都需要创建副本。