Dlaczego C ++ wymusza takie zachowanie w inicjalizacji krzyży? [duplikować]

Powiedzmy, że mam kod c ++:

if (error)
    goto exit;
... 
// size_t i = 0; //error
size_t i;
i = 0;
...
exit:
    ...

Rozumiem, że nie powinniśmy używaćgoto, ale wciąż dlaczego

size_t i;
i = 0;

kompiluj podczassize_t i = 0; nie?

Dlaczego takie zachowanie jest egzekwowane przez standard (wspomniany przez @SingerOfTheFall)?

Możliwe jest przeniesienie do bloku, ale nie w sposób omijający deklaracje z inicjalizacją. Program, który przeskakuje z punktu, w którym zmienna lokalna z automatycznym czasem przechowywania nie znajduje się w zakresie do punktu, w którym znajduje się w zasięgu, jest źle utworzony, chyba że zmienna ma typ POD (3.9) i jest deklarowana bez inicjatora.

questionAnswers(2)

yourAnswerToTheQuestion