矢量迭代器作为函数参数:此代码中发生了什么?

时间:2017-10-15 18:22:32

标签: c++ iterator

我想知道为什么这段代码合法:

std::vector<int>::iterator & foo(std::vector<int>::iterator & iter) {
    return ++iter;
}

int main() {
    std::vector<int> v = { 1,2,3,4 };

    std::cout << *foo(v.begin()) << std::endl;
}

该函数接受对迭代器的非const 引用,但我没有初始化任何持有该迭代器的变量,我只是将v.begin()的结果作为引用传递,但是函数能够增加其值,返回它,并使用结果打印向量的元素:

迭代器存储在哪里? 我还在学习C ++(大约3周前开始),所以我有点困惑,但我有一个&#34;想法&#34;:

是否在调用之前初始化了一个临时变量,比如将文字传递给接受 const 引用的函数(如下所示)?

std::vector<int>::iterator & foo(std::vector<int>::iterator & iter) {
    return ++iter;
}

int main() {
    std::vector<int> v = { 1,2,3,4 };

    std::vector<int>::iterator tempIter = v.begin();
    std::cout << *foo(tempIter) << std::endl;
}

谢谢!

0 个答案:

没有答案