c ++中对象的动态初始化是什么?
请用一个简单的例子来解释......
答案 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)
动态初始化意味着可以在运行时提供初始值。甚至类对象也可以动态初始化。即使用运行时提供的值。 :-))