Die Bindung temporär konstante Referenz in c'tor Initialisiererliste
-
12-10-2019 - |
Frage
Abschnitt 12.2.5 in C ++ 03 sagt: „ Ein vorübergehende zu einem Referenzelement gebunden in einem
Konstruktor Ctor-Initialisierer (12.6.2) verharrt, bis der Konstruktor Ausgänge "
Also habe ich versucht, folgende Programm
#include<iostream>
using namespace std;
struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};
struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}
};
int main()
{
bar obj;
}
Der Ausgang ich erhalte, ist:
foo c'tor
foo d'tor
bar c'tor
Jetzt nach Standard, vorübergehend erzeugt durch foo () in c'tor init-Liste der Bar des c'tor wird nach Bar des c'tor zerstört werden, so foo d'tor
sollte nach bar c'tor
gedruckt werden
aber es ist anders herum.
Bitte legen Sie den Grund.
Lösung
Ich habe schon versucht, diese mit MS VS 2010, und es gibt mir die Ausgabe ergibt auch während der Kompilierung Warnung:
Warnung C4413: 'bar :: ref': Referenzelement in einem temporären initialisiert wird, die nicht nach nicht bestehen bleiben Konstruktor Ausfahrten
foo c'tor
bar c'tor
foo d'tor
Press any key to continue . . .
Es scheint, dass MS VS 2010 Geräte korrekt Spezifikation. Ich bin damit einverstanden, dass es ein Fehler für g ++.
EDIT: ref sollte in constructor`s initialisiert werden initialisieren Liste
.