爲什麼不是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