什么是c ++中对象的动态初始化?

时间:2011-05-10 06:07:54

标签: c++ object dynamic initialization

c ++中对象的动态初始化是什么?

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

4 个答案:

答案 0 :(得分:49)

动态初始化是指在编译时不知道初始化值的情况。它在运行时计算以初始化变量。

实施例,

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.

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

static int c;//this is also static initialization (with zero)!
来自C ++标准(2003)的§3.6.2/ 1说,

  

具有静态存储持续时间的对象   (3.7.1)应为零初始化   (8.5)在任何其他初始化之前   发生了。零初始化和   用常量初始化   表达式被统称为   静态初始化;所有其他   初始化是动态的   初始化

所以有两种初始化:

  • 静态初始化:零初始化或使用常量表达式初始化
  • 任何其他初始化都是动态初始化。

另请注意,相同的变量在静态初始化后可以动态初始化。例如,请参阅以下代码:

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

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

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

答案 1 :(得分:6)

动态初始化是指在编译时未知内存分配后分配给变量的第一个值,它仅在运行时进行评估。 例如

#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。内存分配的时间。

答案 2 :(得分:0)

从键盘运行时初始化变量称为动态初始化。

程序代码: -

 int a=cube(n);

在上面的程序代码中,a是一个全局变量,通过函数n动态分配数字cube,其中cube()执行a的多维数据集号。

这是动态初始化的一个例子。

答案 3 :(得分:0)

动态初始化意味着可以在运行时提供初始值。甚至类对象也可以动态初始化。即使用运行时提供的值。 :-))