Sie können dies nicht tun. Referenzen müssen an etwas gebunden sein, mag Ihnen nicht gefallen, aber es verhindert eine ganze Klasse von Fehlern, denn wenn Sie eine Referenz haben, können Sie immer annehmen, dass sie an etwas gebunden ist, im Gegensatz zu einem Zeiger, der null sein könnte.
Ihr Beispielcode würde sowieso nicht funktionieren, weil Sie versuchen, eine nicht konstante Referenz an ein temporäres Objekt zu binden, das ungültig ist.
Warum brauchen Sie es als Referenz? Eine Lösung wäre, Ihre Art zu gewährleisten, hat ein kostengünstiges Standard-Konstruktor und effizient bewegt wird, dann nur tun:
MyObject obj;
if([condition])
obj = MyObject([something])
else
obj = MyObject([something else]);
Andernfalls würden Sie den bedingten Code in einer oder mehr Funktionen setzen müssen, entweder:
const MyObject& ref = createObject([condition]);
oder
const MyObject& ref = [condition] ? doSomething() : doSomethingElse();
Hinweis, dass diese beiden Versionen verwenden eine const Referenz, die zu einer temporären binden kann, wenn das Objekt muss nicht const sein, dann wieder aufhören zu versuchen, einen Verweis zu verwenden:
MyObject obj = createObject([condition]);
Dies wird wahrscheinlich genauso effizient sein wie das, was Sie zu tun versuchen, dank die return value optimization
Wäre das eine Initialisierung von einem temporären? Das funktioniert auch ohne die Bedingung: 'MyObject & ref = MyObject ([something]);', weil Sie eine temporäre nicht an eine nicht-konstante lvalue-Referenz binden können. – GManNickG
@GManNickG: gilt das auch für Zaffy und suszterpatt Antworten? – qPCR4vir
@ qPCR4vir: Ja. Die Frage steht in gewisser Weise immer noch nicht direkt. – GManNickG