Das kannst du nicht machen. Referenzen müssen an etwas gebunden sein, es mag Ihnen vielleicht nicht gefallen, aber es verhindert eine ganze Klasse von Fehlern, denn wenn Sie eine Referenz haben, können Sie immer davon ausgehen, dass sie an etwas gebunden ist, im Gegensatz zu einem Zeiger, der null sein könnte.
Ihr Beispielcode würde sowieso nicht funktionieren, da Sie versuchen, einen nicht konstanten Verweis an ein temporäres Objekt zu binden, das ungültig ist.
Warum brauchen Sie es überhaupt als Referenz? Eine Lösung wäre, sicherzustellen, dass Ihr Typ über einen kostengünstigen Standardkonstruktor verfügt und effizient verschoben werden kann. Führen Sie dann einfach Folgendes aus:
MyObject obj;
if([condition])
obj = MyObject([something])
else
obj = MyObject([something else]);
Andernfalls müssten Sie den bedingten Code in eine oder mehrere Funktionen einfügen:
const MyObject& ref = createObject([condition]);
oder
const MyObject& ref = [condition] ? doSomething() : doSomethingElse();
Beachten Sie, dass beide Versionen eine const- Referenz verwenden, die an eine temporäre Referenz gebunden werden kann. Wenn das Objekt nicht const sein muss, beenden Sie erneut den Versuch, eine Referenz zu verwenden:
MyObject obj = createObject([condition]);
Dies wird dank der Optimierung des Rückgabewerts wahrscheinlich genauso effizient sein wie das, was Sie versucht haben
MyObject& ref = MyObject([something]);
Dies funktioniert auch ohne die Bedingung: nicht , da Sie eine temporäre Referenz nicht an eine nicht konstante Wertreferenz binden können.