2012-08-14 14 views

risposta

7

Non può essere const perché viene incrementato all'interno della funzione, e non è passato per riferimento perché probabilmente non ha senso di farlo per il chiamante.

Inoltre, se fosse un riferimento non const, non sarebbe possibile utilizzare un temporaneo. Ad esempio, non sarebbe possibile farlo:

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

Perché è cambiato all'interno della funzione, quindi non può essere const. Tuttavia, non vorresti che il suo stato (il suo valore) cambiasse al di fuori della funzione, quindi viene passato per valore (non di riferimento).

1

Perché se non vogliamo modificare il valore del chiamante dovremmo comunque creare una copia.

4

Una domanda migliore è per questo che il secondo argomento viene passato per riferimento const, dal momento che la firma definita nello standard è:

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

Cioè, sia per valore.

Problemi correlati