为什么first
不作为引用和const传递?
template <typename Iterator>
int distance(Iterator first, const Iterator & last) {
int count;
for ( ; first != last; first++)
count++;
return count;
}
答案 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)
因为如果我们不想修改来电者的价值,我们无论如何都需要创建副本。