【发布时间】:2021-02-20 14:12:50
【问题描述】:
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>::const_iterator &beg, vector<int>::const_iterator &end);
int main()
{
vector<int> ivec = {1, 2, 3, 4, 5};
print(ivec.cbegin(), ivec.cend());
return 0;
}
void print(vector<int>::const_iterator &beg, vector<int>::const_iterator &end)
{
if (beg == end)
{
cout << "over" << endl;
return;
}
cout << *beg << endl;
print(++beg, end);
}
ubuntu 20,g++ 9.0
rec_print_vect.cpp: In function ‘int main()’:
rec_print_vect.cpp:11:19: error: cannot bind non-const lvalue reference of type ‘std::vector<int>::const_iterator&’ {aka ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >&’} to an rvalue of type ‘std::vector<int>::const_iterator’ {aka ‘__gnu_cxx::__normal_iterator<const int*, std::vector<int> >’}
11 | print(ivec.cbegin(), ivec.cend());
| ~~~~~~~~~~~^~
rec_print_vect.cpp:6:41: note: initializing argument 1 of ‘void print(std::vector<int>::const_iterator&, std::vector<int>::const_iterator&)’
6 | void print(vector<int>::const_iterator &beg, vector<int>::const_iterator &end);
const int &i = 10 是法律,对吧?为什么const_iterator 不能?我很困惑。这个程序只想递归打印一个向量。我想为迭代器使用参考。因为我不需要修改向量中的元素,所以我将 const_iterator 与 cbegin() 和 cend() memeber 函数一起使用。我认为将 const var 引用绑定到 const var 或文字值是正确的。但是我的代码无法通过编译阶段。如果我在函数形式参数中使用 const_iterator 而不是 const_iterator&,我的代码可以运行良好。
【问题讨论】:
标签: c++ recursion pass-by-reference function-definition const-iterator