Что такое динамическая инициализация объектов в С++?
Пожалуйста, объясните с помощью простого примера...
Что такое динамическая инициализация объектов в С++?
Пожалуйста, объясните с помощью простого примера...
Динамическая инициализация - это то, что значение инициализации неизвестно во время компиляции. Он вычислялся во время выполнения для инициализации переменной.
Пример
int factorial(int n)
{
if ( n < 0 ) return -1; //indicates input error
else if ( n == 0 ) return 1;
else return n * factorial(n-1);
}
int const a = 10 ; //static initialization
//10 is known at compile time. Its 10!
int const b = factorial(8); //dynamic initialization
//factorial(8) isn't known at compile time,
//rather it computed at runtime.
То есть, статическая инициализация обычно включает константное выражение (которое известно во время компиляции), тогда как динамическая инициализация включает в себя не константное выражение.
static int c;//this is also static initialization (with zero)!
В §3.6.2/1 из стандарта С++ (2003) говорится:
Объекты со статической продолжительностью хранения (3.7.1) должны быть нулевыми (8.5) перед любой другой инициализацией происходит. Нулевая инициализация и инициализация с константой выражения называются совместно статическая инициализация; все остальные инициализация динамическая инициализация.
Итак, есть два типа инициализаций:
Также обратите внимание, что одна и та же переменная может быть динамически инициализирована после статической инициализации. Например, см. Этот код:
int d = factorial(8);
int main()
{
}
Так как d
является глобальной переменной, она имеет статическое хранилище. Это означает, что согласно §3.6.2.1
он инициализируется до 0 на этапе статической инициализации, который происходит до того, как произойдет любая другая инициализация. Затем позже во время выполнения он динамически инициализируется значением, возвращаемым функцией factorial()
.
Это означает, что глобальные объекты могут быть инициализированы дважды: один раз статической инициализацией (которая является нулевой инициализацией), а позже, во время выполнения, они могут быть динамически инициализированы.
Динамическая инициализация означает первое значение, назначенное переменной после выделения памяти во время компиляции, оно оценивается только во время выполнения. например
#include <iostream.h>
using namespace std;
int sample()
{
int x;
cin >> x;
return x;
}
const int t = sample(); //dynamic initialization
int p = sample(); //dynamic initialization
void main()
{
cout << t;
cout << p;
}
Как известно, константа может получить значение только один раз, то есть во время инициализации. этот пример показывает, что даже глобальная переменная, которая является статическим хранилищем, если динамически инициализируется возвращаемым значением функции, первое значение, присвоенное переменной, - это значение, возвращаемое функцией, которое заменяет начальное значение по умолчанию 0 переменной, которая назначается в время выделения памяти.
Инициализация переменной во время выполнения с клавиатуры называется динамической инициализацией.
Программный код: -
int a=cube(n);
В приведенном выше программном коде a
- это глобальная переменная, для которой число n
динамически назначается через функцию cube
, где cube()
выполняет куб числа.
Это пример динамической инициализации.
Динамическая инициализация означает, что начальные значения могут быть предоставлены во время выполнения. Даже объекты класса могут быть инициализированы динамически. То есть со значениями, указанными во время выполнения.:-))