4

「The C++ Programming Language (3rd)」p.255:

一時は、const 参照または名前付きオブジェクトの初期化子として使用できます。例えば:

void g(const string&, const string&);

void h(string& s1, string& s2)
{
   const string& s = s1+s2;
   string ss = s1+s2;

   g(s, ss);  // we can use s and ss here
}

これで問題ありません。「その」参照または名前付きオブジェクトがスコープ外になると、一時オブジェクトは破棄されます。

によって作成された一時オブジェクトは、スコープ外s1+s2になると破棄されると言っているのですか? ssにコピー初期化されるとすぐに破壊されませんssか?

4

2 に答える 2

2

コード内の一時的なものは。だけs1 + s2です。最初のものはconst-refにバインドされるためs、その存続期間は。の存続期間に延長されsます。コード内の他の何も一時的なものではありません。特に、それらは明らかに変数と呼ばsれるため、一時的でも一時的でもありません。ss

2つ目s1 + s2ももちろん一時的なものですが、初期化にのみ使用されていたため、行の終わりで停止しますss

更新:おそらく1つのポイントは強調に値します:最後の行でg(s, ss);、ポイントはs完全に有効な参照であり、おそらく予想されたようにぶら下がっている参照ではありません。 const-referencesへ。

于 2012-02-11T17:23:33.197 に答える
1

2つの一時的なものが作成されるため、両方とも当てはまります。

//creates a temporary that has its lifetime extended by the const &
const string& s = s1+s2;

//creates a temporary that is copied into ss and destroyed
string ss= s1+s2;
于 2012-02-11T17:24:07.420 に答える