私はこれを経験していて、少し混乱しています。クラスを次のように宣言するとします。
class cls
{
public:
int x;
cls(int _x):x(_x){}
cls& operator=(cls& ob)
{
x = ob.x;
return *this;
}
};
次に、2 つのオブジェクトを作成してコピー操作を実行し、代入演算子が次のようにオーバーロードされる前後の両方の変数のアドレスを出力します。
cls o1 = 7;
cls o2 = cls(8);
cout<<&o1<<endl; //0330F880
cout<<&o2<<endl; //0330F874
o1 = o2;
cout<<&o1<<endl; //0330F880
cout<<&o2<<endl; //0330F874
どちらのアドレス グループも同じです。これは、代入演算子が参照によって返されるためです。
しかし、代入演算子を値で返すように定義すると、同じアドレス グループ値が返されることに気付きました。
上記のリンクでは、値で返される場合、オブジェクトのコピーが返されると回答されています。次に、同じアドレス値を返すのはなぜですか。彼らは違うべきではありませんか。私の概念を明確にするのを手伝ってください。