1

次のコードで何が起こるかを理解したい

struct A
{
  vector<double> x;
};

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

関数fが終了すると、axは破棄されますか?前もって感謝します!

4

3 に答える 3

4

いいえa.x、破壊されません。へのローカル参照を作成しただけa.xで、関数は終了します。何も変更されません。あなたのコードは事実上何もしません。

于 2012-11-07T23:03:04.650 に答える
4

参照はオブジェクトではないことに注意してください。y変数ですが、オブジェクトではありません。これは既存のオブジェクトへの参照ですa.xが、そのオブジェクト自体はのスコープに対してローカルではありませんf。したがって、変数yはの終わりでスコープ外になりfますが、それが参照するオブジェクトは範囲外になりません。

于 2012-11-07T23:19:44.370 に答える
3

この場合、あなたが入るとき、あなたf()はローカルに、そして他の世界から独立して存在するそれへの参照yを作成します。ローカルに作成された参照を離れると、スコープ外になり、破棄されます。残りの世界は、あなたが入る前の状態のままです。a.xaf()yf()

于 2012-11-07T23:28:41.013 に答える