2012-08-14 54 views
7

爲什麼不是first作爲參考傳遞並且是const?爲什麼第二個變量作爲參考傳遞並且是const

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

只是出於好奇,你在哪裏找到這段代碼片段? – juanchopanza 2012-08-14 14:44:53

+0

@ juanchopanza這是一個解決方案,我們不得不在uni – code511788465541441 2012-08-23 20:18:55

回答

7

它不可能是const,因爲它增加的功能裏面,因爲它可能是沒有意義的呼叫者做到這一點,是不是按引用傳遞。

此外,如果它是非常量引用,將不可能使用臨時。例如,你將無法做到這一點:

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

因爲它在函數內部被改變,所以它不能是const。但是,您不希望其狀態(其值)在函數外部更改,因此它是通過值(不是引用)傳遞的。

1

因爲如果我們不想修改調用者的值,我們需要創建一個副本。

4

更好的問題是爲什麼第二個參數是由常量引用傳遞,因爲在標準中定義的簽名是:

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

即,既通過值。

相關問題