最近、演算子のオーバーロードに関するC++の知識がリフレッシュされました。お勧めしますが、私はoperator overload of '='
の*this
への参照を返します。しかし、その後、私は一つの問題が見つかりました: -クラスの=演算子のオーバーロード
#include <iostream>
using namespace std;
class MyClass
{
int num = 4;
public:
MyClass() = default;
MyClass(int x) : num(x) {}
void getnum(int x)
{
num = x;
}
void shownum()
{
cout << num << '\n';
}
MyClass& operator = (const MyClass& obj) // works even without const
{
this->num = obj.num;
return *this;
}
~MyClass() = default;
};
int main()
{
MyClass x, y(5), z(7);
z = MyClass(8) = y; // temporary object return reference
x.shownum();
y.shownum();
z.shownum();
}
このコードは、一時オブジェクトMyClass(8)
がy
(細かい問題なし)と同一視される間に関与しているにもかかわらず、UB
になるdoes notのをしかし、それは参照が送信されますですz
と同じです。ここでdangling reference
問題が発生しないのはなぜですか? const MyClass&' on the temporary object 'MyClass(8)
なしでオーバーロード機能が動作するのはなぜですか?
これは暗黙的な変換の1つです。オブジェクトをより揮発性にすることは完全に正当です。 – Incomputable
なぜこのようなコードを書くことを検討していますか? –
実験@EdHeal:-P –