c++ - 没有通过引用看到对 vector 最后一个元素的操作的影响

标签 c++ c++11 reference

看来我并不完全理解 C++ 引用到底是如何工作的。尝试运行以下代码片段:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> test{1,2,3};
    int& ref = test.back();
    auto lambda = [&ref, &test](){
        std::cout << "inside lambda " << ref << std::endl;
        ref += 1;
        for (auto&v : test) { std::cout << v << " "; }
    };

    lambda(); lambda(); lambda();
    test.push_back(5);
    lambda(); lambda(); lambda();
}

得到了这个结果:

inside lambda 3                                                                                                                                                                       
1 2 4                                                                                                                                                                                 
inside lambda 4                                                                                                                                                                       
1 2 5                                                                                                                                                                                 
inside lambda 5                                                                                                                                                                       
1 2 6                                                                                                                                                                                 
inside lambda 6                                                                                                                                                                       
1 2 6 5                                                                                                                                                                               
inside lambda 7                                                                                                                                                                       
1 2 6 5                                                                                                                                                                               
inside lambda 8                                                                                                                                                                       
1 2 6 5  

为什么在push_back之后完成后, vector 元素都没有增加? 又在哪里ref指从这一刻起?

最佳答案

开始时,ref引用test存储的第三个元素。推回新元素后,vector 重新分配了其存储空间,因此旧的 ref 元素不再有效。您的代码会导致未定义的行为

关于c++ - 没有通过引用看到对 vector 最后一个元素的操作的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073526/

相关文章:

c++ - 访问 std::map 键和值

c++ - librdf raptor 处理对象中的整数值

c++ - 如何动态访问函数对象的目标

c++ - 从 engOpen(..) 启动 matlab,被通知引擎被关闭

c++ - 没有数据成员的C++中的派生类问题

c - 按值或引用将数组传递给函数是否相同?

c++ - 将参数作为 std::string 或 const std::string& 传递?

c++ - 编译时内存重新排序会导致死锁吗?

c++ - D3D11 不知从哪里增加了引用计数?

vba - 这些新颖的方法 [并且可能是最好的方法?] 在 VBA 中引用动态单元格吗?