C ++:本地参考

时间:2012-11-07 22:59:48

标签: c++ reference local

我想了解以下代码中发生的事情

struct A
{
  vector<double> x;
};

void f(A &a)
{
  vector<double> &y = a.x;
}

当函数f退出时,a.x被破坏了吗?提前谢谢!

3 个答案:

答案 0 :(得分:4)

没有a.x没有被销毁。您只是创建了对a.x的本地引用,然后函数退出 - 没有任何更改。你的代码实际上什么都不做。

答案 1 :(得分:4)

请记住,引用不是对象。 y变量,但不是对象。它是对现有对象a.x的引用,但该对象本身不是f范围的本地对象。因此变量y超出f末尾的范围,但它引用的对象不会。

答案 2 :(得分:3)

在这种情况下,当您输入f()时,您会在本地创建一个y到[{1}}的引用,该引用独立于a.x和世界其他地方。当您离开a时,本地创建的引用f()超出范围并被销毁。世界其他地方保持原样,直到您输入y