7

first参照と const としても渡されないのはなぜですか?

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

4 に答える 4

7

関数内でインクリメントされるconstためではありません。また、呼び出し元にとっておそらく意味がないため、参照渡しされません。

さらに、それが非 const 参照である場合、temporary を使用することはできません。たとえば、次のことはできません。

std::vector<int> v{ 1, 2, 3, 4 };
auto distance = std::distance(v.begin(), v.end());
于 2012-08-14T14:28:21.123 に答える
6

関数内で変更されるため、const にはなりません。ただし、その状態 (その値) を関数の外で変更したくないため、(参照ではなく) 値で渡されます。

于 2012-08-14T14:29:22.060 に答える
4

より良い質問は、標準で定義されている署名が次のとおりであるため、2 番目の引数が const 参照によって渡される理由です。

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

つまり、両方とも値です。

于 2012-08-14T14:39:03.783 に答える
1

呼び出し元の値を変更したくない場合は、とにかくコピーを作成する必要があるためです。

于 2012-08-14T14:29:40.873 に答える