次のように定義された演算子を持つオブジェクトがあります。
P& operator +(const P &rhs) {
return P(x + rhs.x, y + rhs.y, z + rhs.z);
}
カスタムのコピー演算子や代入演算子はありません。
ベクトル内で加算の結果を直接割り当てると、その中にゴミが表示されます。
P p1(1.0, 0.0, 0.0);
P p2(0.0, 0.0, 0.0);
vector<P> v(1);
v[0] = p1 + p2; // v[0] now contains garbage.
変数を介してそれを行う場合、すべてが期待どおりです。
vector<P> u(1);
P q = p1 + p2;
u[0] = q; // u[0] contains correct value.
そのような行動の理由は何でしょうか?2つのケースの違いは何ですか?