如果调用std :: vector :: begin()但将返回的迭代器分配给引用会发生什么?为什么它可以工作,迭代器值存储在哪里?
std::vector<int> v;
auto a = v.begin(); //I assume iterator is stored on the stack in variable "a".
auto& b = v.begin(); //What happens here?
答案 0 :(得分:7)
这一行
auto& b = v.begin();
是一个错误,因为v.begin()返回一个临时的,你不能将临时绑定到非const引用。
答案 1 :(得分:4)
无处。你有一个悬挂的参考。不要这样做。
大多数编译器都会拒绝这一点,尽管某些版本的Visual Studio会假装您编写了const auto&
并延长了其临时生命周期。临时存储的地方无关紧要。