c++ - 为什么编译器允许在 C++ 中使用 vector.begin()=vector.end()?

标签 c++ vector std

在学习 C++ 中的迭代器时,我尝试了以下方法:

#include <vector>

int main() {
    std::vector<int> a;
    a.end()=a.begin();
    //Why is this even allowed by the compiler?
}

我错过了什么?

最佳答案

如果例如函数结束将返回一个指针,那将是不可能的。

例如这段代码不会被编译

int a[] = { 1, 2, 3 };

std::end( a ) = std::begin( a );

GCC 问题

error: lvalue required as left operand of assignment
  std::end( a ) = std::begin( a );
                ^

但是,当使用类类型的对象时,它们可以调用重载的复制(或移动)赋值运算符。

那么问题来了,为什么函数不返回常量迭代器对象。我认为可以应用 operator++。例如

auto it = ++c.begin();

对于作为指针的直接访问迭代器,您可以简单地编写

auto it = begin( a ) + 1;

关于c++ - 为什么编译器允许在 C++ 中使用 vector.begin()=vector.end()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25958588/

相关文章:

c++ - 使用 2D vector 大小分配变量的内存

c++ - 将元组的 vector 转换/构造为堆

c++ - 如何从新插入的对(到 map )返回引用对?

c++ - 将 std::map 与 std::list::iterator 一起使用

c++ - 如何将自定义时间 "ticks"转换为 TDateTime?

c++ - 错误:从父类父类派生子类Son时基类未定义

c++ - 提高平均图像过滤速度的方法

c++ - 封装 vector

c++ - 为什么 std::list 想不带参数调用我的分配器?

c++ - 使用try-catch C++处理文件