Sie können das nicht tun, weil case
Etiketten sind eigentlich nur Einstiegspunkte in den enthaltenen Block.
Dies wird am deutlichsten illustriert durch Duff's Gerät . Hier ist ein Code aus Wikipedia:
strcpy(char *to, char *from, size_t count) {
int n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
}
Beachten Sie, wie die case
Etiketten ignorieren die Blockgrenzen völlig. Ja, das ist böse. Aber deshalb funktioniert Ihr Codebeispiel nicht. Das Springen zu einem case
Etikett ist dasselbe wie die Verwendung von goto
Sie dürfen also nicht mit einem Konstruktor über eine lokale Variable springen.
Wie mehrere andere Poster bereits angedeutet haben, müssen Sie einen eigenen Block einrichten:
switch (...) {
case FOO: {
MyObject x(...);
...
break;
}
...
}