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.