Considerate seguente codice:Quali sono i segni dell'inizializzazione delle croci?
#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 ++ lamenta crosses initialization of 'int r'
domande .Le mie sono:
- Che cosa è
crosses initialization
? - Perché il primo inizializzatore
x + y
ha superato la compilazione, ma successivamente non è riuscito? - Quali sono i problemi del cosiddetto
crosses initialization
?
EDIT:
So che dovrei usare le parentesi per specificare l'ambito di r
ma voglio sapere perché, ad esempio perché non POD non poteva essere definito in multi-caso switch.
Grazie.
La mia comprensione, date le risposte di seguito, per il punto 3 è che questo errore è una restrizione eccessiva di C++. Se r non viene usato dopo l'etichetta, non c'è alcun impatto (anche se l'esempio qui usa r, può essere rimosso nel caso 2 e il compilatore darebbe lo stesso errore). La prova migliore è che è permesso in C, e persino in C11. – calandoa
Possibile duplicato di [Errore: vai all'etichetta del caso] (http://stackoverflow.com/questions/5685471/error-jump-to-case-label) –