c++ - 我在这里得到结构拷贝吗?

标签 c++ reference overwrite

这是一个伪造的代码示例

vector<Fred> gFred;
{
    // init gFred

    Fred &fred = gFred[0];

    size_t z = 0;
    do
    {
        fred = gFred[z];

        // do odd processing with fred

        z++;
    }
    while (fred.lastElementInSet == 0);
}

引起我注意的是 gFred[0] 被覆盖了。 这让我想到,与其将 init fred 作为对新元素的引用,

fred = gFred[z];

实际发生的是 gFred[1] 正在覆盖 gFred[0]。

我在想在这里做的正确的事情是,将自己的头向上敲几下,然后将其转化为指针实现并继续我的生活。

我的诊断是否正确?还是我需要更多的教育?

最佳答案

是的,你在那里得到了一个结构拷贝。引用无法重新绑定(bind),即它们在初始化后保持不变。

而且您的解决方案也很合适。不过不知道会不会敲自己的头。

关于c++ - 我在这里得到结构拷贝吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592067/

相关文章:

c++ - 将球体移动到平面永远不会预测 future 的碰撞

c++ - 程序因数组声明而崩溃

c++ - 在 C++ 中安全地传递对抽象类的引用

c++ - shared_ptr 的引用仍然是指针吗?

c++覆盖一个已经定义的变量

javascript - 假导航器属性

linux - 如何直接覆盖 'unexpand'(空格到制表符的转换)?

c++ - 在发布序列中使用原子读-修改-写操作

c++ - 如何在 C++ 中有效地访问数组的多个元素?

c++ - 引用、 vector 、std::vector::at 和易于使用的接口(interface)