С++ для начинающих




Статические локальные объекты - часть 2


const int iterations = 2;

void func() {

    int value1, value2; // не инициализированы

    static int depth;   // неявно инициализирован нулем

    if ( depth < iterations )

        { ++depth; func(); }

    else depth = 0;

    cout << "\nvaluel:\t" << value1;

    cout << "\tvalue2:\t" << value2;

    cout << "\tsum:\t" << value1 + value2;

}

int main() {

    for ( int ix = 0; ix < iterations; ++ix ) func();

    return 0;

}

Вот результат работы программы:

valuel:  0           value2:  74924      sum:  74924

valuel:  0           value2:  68748      sum:  68748

valuel:  0           value2:  68756      sum:  68756

valuel:  148620      value2:  2350       sum:  150970

valuel:  2147479844  value2:  671088640  sum:  -1476398812

valuel:  0           value2:  68756      sum:  68756

value1 и value2 – неинициализированные автоматические объекты. Их начальные значения, как можно видеть из приведенной распечатки, оказываются случайными, и потому результаты сложения непредсказуемы. Объект depth, несмотря на отсутствие явной инициализации, гарантированно получает значение 0, и функция func() рекурсивно вызывает сама себя только дважды.




Содержание  Назад  Вперед