2016-12-10 3 views
4

sein Ich nehme an, die statische Daten Mitglied einer Klasse ein Referenztyp auf eine globale Variable wie folgt initialisiert werden kann:Probleme mit Referenztyp Static Data-Mitglied, könnte Compiler Fehler

#include <iostream> 
#include <stdio.h> 

const unsigned int global =0x1fee; 
struct K { 
    int a; 
    static const int & iref; 
}; 
const int & K::iref=global; 
int main() 
{ 
    printf("%d\n",K::iref); 
    return 0; 

} 

Aber in meinem VC++ test, Es kann kompilieren, aber bei der Ausführung eine Ausnahme erzeugen. Ist es nur ein Fehler mit VC++? Habe ich etwas falsch gemacht?

+1

Wollen Sie absichtlich versuchen, ein 'unsigned int' an ein' signed int & 'zu binden? – dyp

+0

Nein, nur zum Testen des Problems. kein Problem wenn ich'global 'in signed int ändere. Es sieht also wie ein Fehler aus, aber ich möchte bestätigen, dass es – JavaMan

+0

ist. Es sieht tatsächlich wie ein Fehler aus. Durch Binden eines "unsigned int" an ein "signed int const &" sollte ein temporärer 'unsigned int' erzeugt werden, dessen Lebensdauer auf die Ziel-Referenzvariable (' K :: iref') ausgedehnt wird. Es sieht fast so aus, als würde MSVC diese lebenslange Erweiterung nicht ausführen. – dyp

Antwort

0

Sie müssen nur die Chance

const int & k :: iref

zu

k :: iref

Und Sie müssen initialisieren die Variable, wenn Sie deklarieren, nicht aus sein Umfang.