c ++のオブジェクトの動的初期化とは
簡単な例で説明してください...
動的初期化とは、コンパイル時に初期化値がわからないものです。実行時に変数を初期化するために計算されます。
例、
_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's computed at runtime.
_
つまり、静的初期化通常はconstant-expression(コンパイル時に既知)を含み、動的初期化は非定数式を含みます。
_static int c;//this is also static initialization (with zero)!
_
C++ Standard(2003)の§3.6.2/ 1には、
静的ストレージ期間(3.7.1)のオブジェクトは、他の初期化が行われる前にゼロで初期化されます(8.5)。ゼロ初期化と定数式による初期化は、まとめて静的初期化;と呼ばれます。他のすべての初期化は動的初期化です。
したがって、2種類の初期化があります。
また、同じ変数を静的に初期化した後、動的に初期化できることに注意してください。たとえば、次のコードを参照してください。
_int d = factorial(8);
int main()
{
}
_
d
はグローバル変数であるため、静的ストレージがあります。つまり、_§3.6.2.1
_によれば、他の初期化が行われる前に発生する静的初期化フェーズで0に初期化されます。その後、実行時に、関数factorial()
から返された値で動的に初期化されます。
つまり、グローバルオブジェクトは2回初期化できます。1回は静的初期化(ゼロ初期化)で、その後は実行時に動的に初期化できます。
動的な初期化とは、メモリ割り当て後にコンパイル時に変数に割り当てられた最初の値を意味し、実行時にのみ評価されます。例えば
#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()
はキューブを実行します数の。
これは、動的初期化の例です。
動的初期化とは、実行時に初期値が提供されることを意味します。クラスオブジェクトも動的に初期化できます。つまり実行時に提供される値を使用します。 :-))