Betrachten Sie den folgenden Code:
#include <iostream>
using namespace std;
int main()
{
int x, y, i;
cin >> x >> y >> i;
switch(i) {
case 1:
// int r = x + y; -- OK
int r = 1; // Failed to Compile
cout << r;
break;
case 2:
r = x - y;
cout << r;
break;
};
}
G ++ beschwert sich crosses initialization of 'int r'
. Meine Fragen sind:
- Was ist
crosses initialization
? - Warum besteht der erste Initialisierer
x + y
die Kompilierung, letzterer ist jedoch fehlgeschlagen? - Was sind die Probleme der sogenannten
crosses initialization
?
Ich weiß, dass ich Klammern verwenden sollte, um den Umfang von anzugeben r
, aber ich möchte wissen, warum, zum Beispiel, warum Nicht-POD nicht in einer Switch-Anweisung mit mehreren Fällen definiert werden konnte.