什么是dynamic初始化对象在C + +?

什么是在c + +中的对象的dynamic初始化?

请用一个简单的例子来解释…

dynamic初始化是在编译时不知道初始化值的。 它在运行时被计算来初始化variables。

例,

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. 

也就是说,静态初始化通常涉及常量expression式(在编译时已知),而dynamic初始化涉及非常量expression式。

 static int c;//this is also static initialization (with zero)! 

C ++标准(2003)的§3.6.2/ 1说,

具有静态存储持续时间(3.7.1)的对象应在进行任何其他初始化之前进行初始化(8.5)。 零初始化和一个常量expression式初始化统称为静态初始化 ; 其他的初始化都是dynamic初始化

所以有两种初始化:

  • 静态初始化:它的零初始化或者用一个常量expression式初始化
  • 其他初始化是dynamic初始化。

还要注意,在静态初始化之后,相同的variables可以被dynamic地初始化。 例如,看到这个代码:

 int d = factorial(8); int main() { } 

由于d是一个全局variables,因此它具有静态存储。 这意味着,根据§3.6.2.1在任何其他初始化发生之前的静态初始化阶段,它被初始化为0。 然后,在运行时,它会从函数factorial()返回的值dynamic初始化。

这意味着,全局对象可以被初始化两次:一次是静态初始化(这是零初始化),然后在运行时,它们可以被dynamic初始化。

dynamic初始化意味着在编译时分配内存之后分配给variables的第一个值,它只在运行时计算。 例如

 #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; } 

正如我们所知,一个常量只能在初始化的时候获得一次值。 这个例子表明,即使是一个静态存储的全局variables,如果通过函数的返回值dynamic初始化的话,赋给variables的第一个值就是函数返回的值,它将replace分配给variables的初始默认值0内存分配的时间。

在运行时从键盘初始化variables称为dynamic初始化。

程序代码: –

  int a=cube(n); 

在上面的程序代码中, a是一个全局variables,数字n是通过一个函数cubedynamic分配的,其中cube()执行数字的立方体。

这是dynamic初始化的一个例子。

dynamic初始化意味着可以在运行期间提供初始值。 即使类对象也可以dynamic初始化。 即在运行时提供的值。 :-))