为什么不是first
作为参考传递并且是const?为什么第二个变量作为参考传递并且是const
template <typename Iterator>
int distance(Iterator first, const Iterator & last) {
int count;
for (; first != last; first++)
count++;
return count;
}
为什么不是first
作为参考传递并且是const?为什么第二个变量作为参考传递并且是const
template <typename Iterator>
int distance(Iterator first, const Iterator & last) {
int count;
for (; first != last; first++)
count++;
return count;
}
它不可能是const
,因为它增加的功能里面,因为它可能是没有意义的呼叫者做到这一点,是不是按引用传递。
此外,如果它是非常量引用,将不可能使用临时。例如,你将无法做到这一点:
std::vector<int> v{ 1, 2, 3, 4 };
auto distance = std::distance(v.begin(), v.end());
因为它在函数内部被改变,所以它不能是const。但是,您不希望其状态(其值)在函数外部更改,因此它是通过值(不是引用)传递的。
因为如果我们不想修改调用者的值,我们需要创建一个副本。
更好的问题是为什么第二个参数是由常量引用传递,因为在标准中定义的签名是:
template <typename Iterator>
typename iterator_traits<InputIterator>::difference_type
distance(InputIterator first, InputIterator last);
即,既通过值。
只是出于好奇,你在哪里找到这段代码片段? – juanchopanza 2012-08-14 14:44:53
@ juanchopanza这是一个解决方案,我们不得不在uni – code511788465541441 2012-08-23 20:18:55