Ich habe vor kurzem aktualisiert meine C++ Kenntnisse in Operatorüberladung. Wie empfohlen, gebe ich einen Verweis auf *this
für die operator overload of '='
zurück. Aber dann fand ich ein Problem: -Überladen von = Operator für eine Klasse
#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();
}
Dieser Code doesnt Ergebnis in ein UB
obwohl ein temporäres Objekt MyClass(8)
zwischen denen beteiligt ist, wird mit y
(fein kein Problem) gleichgesetzt werden, aber dann ist es Bezug wird gesendet mit z
gleichzusetzen. Warum tritt das Problem dangling reference
hier nicht auf? Warum funktioniert die Überlastfunktion ohne const MyClass&' on the temporary object 'MyClass(8)
?
Es ist einer der impliziten Konvertierungen. Es ist vollkommen legitim, ein Objekt const flüchtiger zu machen – Incomputable
Warum erwägen Sie, schreiben Sie solchen Code –
Experiment @EdHeal :-P –