我在这里制作结构副本吗?

Evi*_*ach 0 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);
}
Run Code Online (Sandbox Code Playgroud)

引起我注意的是gFred [0]被覆盖的事实.这让我认为,而不是将init作为对新元素的引用,

fred = gFred[z];
Run Code Online (Sandbox Code Playgroud)

实际发生的是gFred [1]覆盖了gFred [0].

我正在考虑在这里做正确的事情,就是把我自己的头脑转过头几次,把它变成一个指针实现并继续我的生活.

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

MSN*_*MSN 6

是的,你在那里得到一个结构副本.引用不能反弹,即它们在初始化后保持不变.

而你的解决方案也是合适的.尽管如此,Dunno还是打了个招呼.