Локальные объекты

Задания раздела 6.1.1
6.6. Объясните различия между параметром, локальной переменной и локальной статической переменной. Приведите пример функции, в которой каждая из них могла бы быть полезной.
6.7. Напишите функцию, которая возвращает значение 0 при первом вызове, а при каждом последующем вызове возвращает последовательно увеличивающиеся числа.

6.1.1


6.6. Объясните различия между параметром, локальной переменной и локальной статической переменной. Приведите пример функции, в которой каждая из них могла бы быть полезной.

Параметры - это автоматические объекты. Место для параметров резервируется при запуске функции. Параметры определяются в пределах тела функции. Следовательно, они удаляются по завершению функции.

Объекты, соответствующие обычным локальным переменным, создаются при достижении процессом выполнения определения переменной в функции. Они удаляются, когда процесс выполнения достигает конца блока, в котором определена переменная.

Чтобы получить локальную переменную, продолжительность существования которой не прерывается между вызовами функций, используют ключевое слово static. Каждый локальный статический объект инициализируется прежде, чем выполнение достигнет определения объекта. Локальная статическая переменная не удаляется по завершении функции; она удаляется по завершении программы. Если у локальной статической переменной нет явного инициализатора, она инициализируется значением по умолчанию,  следовательно, локальные статические переменные встроенного типа инициализируются нулем.

По поводу функции, вот в следующем задании рассматривается пример локальной статической переменной. Передать в функцию параметр и сложить его со счетчиком вызовов. В программе есть и параметр и локальный объект и локальный статический объект.

#include <iostream>
size_t countcalls (int val) {
static size_t ctr=0;
size_t a=ctr+val;
++ctr;
return a;
}
int main()
{
for (size_t i=0; i!=10; ++i)
std::cout << countcalls(i)<< std::endl;
return(0);
}

6.7. Напишите функцию, которая возвращает значение 0 при первом вызове, а при каждом последующем вызове возвращает последовательно увеличивающиеся числа.

#include <iostream>
size_t countcalls () {
static size_t ctr=0;
return ctr++;
}
int main()
{
for (size_t i=0; i!=10; ++i)
std::cout << countcalls()<< std::endl;
return(0);
}

Добавить комментарий