C++:如果迭代器是一个对象,为什么不能将其初始化为引用迭代器?

问题描述 投票:0回答:1

假设我们有以下内容:

// Example program
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
  vector <int> v {1,2,3};
  vector <int>::iterator v_i1 = v.begin();
  vector <int>::iterator &v_i2 = v.begin(); // error out - initial value of reference to non-const must be an lvalue
}

理解:

  1. v.begin() 将返回一个迭代器 - 它实际上是一个对象
  2. v_i1 变量通过 begin() 返回的迭代器进行初始化。没问题
  3. 如果begin()返回一个迭代器(这里是对象??),为什么不能将它分配给引用v_i2?是因为 begin() 返回一个右值吗?

感谢您帮助我更好地理解。

c++ reference iterator c++20
1个回答
0
投票

非常量引用无法通过

std::vector::begin()
绑定到右值 returnrd。使引用常量。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
  vector <int> v {1,2,3};
  vector <int>::iterator v_i1 = v.begin();
  const vector <int>::iterator &v_i2 = v.begin();
}
© www.soinside.com 2019 - 2024. All rights reserved.