2017-02-09 5 views
0

Ich übergebe Verweise auf Zeiger, um virtuelle Funktionen zu verwenden.Verweis auf Zeiger übergeben

Option 1 tut, was ich vorhatte und ruft die entsprechende abgeleitete virtuelle Klassenfunktion auf. Option 2 nicht, was darauf hindeutet, dass keine Referenz erteilt wurde. Da dies kompiliert, was bedeutet dann in diesem Zusammenhang & wenn nicht durch Verweis gehen?

1. 
Derived aDerived; 
Derived *pDerived = &aDerived; 

2. 
Derived *pDerived = &Derived(); 
+3

Option 2 sollte in Standard C++ nicht kompilieren. Außerdem gibt es nirgendwo Hinweise auf Zeiger. – juanchopanza

+2

Warum müssen Sie Verweise auf Zeiger übergeben, um virtuelle Funktionen zu verwenden? – tadman

+1

In Ihrem ersten Beispiel ist '&' der 'address-of'-Operator, der nichts mit Referenzen zu tun hat. – Barmar

Antwort

1

In Option 2 Sie versuchen, die Adresse eines rvalue zu nehmen. Dies sollte nicht mit kompilieren:

error: lvalue required as unary ‘&’ operand

Check this live example.

+0

Dank - revidierte VS Warnstufe auf 4 und es zeigte im Grunde, was Sie erwähnt haben. – cafekaze

Verwandte Themen