Rozważmy następujący kod:Jakie są oznaki inicjowania przecinków?
#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 ++ narzeka crosses initialization of 'int r'
pytania .My to:
- Co jest
crosses initialization
? - Dlaczego pierwszy inicjator
x + y
przekazuje kompilację, ale nie udało się później? - Jakie są problemy z tak zwanym
crosses initialization
?
EDIT:
Wiem, że powinienem użyć nawiasów, aby określić zakres r
ale chcę wiedzieć, dlaczego, na przykład, dlaczego nie-POD nie może być zdefiniowane w multi-case switch.
Dzięki.
Moje zrozumienie, biorąc pod uwagę poniższe odpowiedzi, dla punktu 3 jest to, że ten błąd jest nadmiernym ograniczeniem C++. Jeśli r nie jest używane po etykiecie, nie ma żadnego wpływu (nawet jeśli przykład tutaj używa r, może być usunięty w przypadku 2, a kompilator dałby ten sam błąd). Lepszym dowodem jest to, że jest dozwolone w C, a nawet w C11. – calandoa
Prawdopodobny duplikat [Błąd: Przejdź do etykiety przypadku] (http://stackoverflow.com/questions/5685471/error-jump-to-case-label) –