【发布时间】:2011-08-22 04:48:03
【问题描述】:
什么是c++中对象的动态初始化?
请用一个简单的例子解释一下……
【问题讨论】:
-
@Downvoters:这个问题有什么问题?
-
我想它的教科书性质。
标签: c++ object dynamic initialization
什么是c++中对象的动态初始化?
请用一个简单的例子解释一下……
【问题讨论】:
标签: c++ object dynamic initialization
动态初始化是在编译时不知道初始化值的初始化。它在运行时计算以初始化变量。
例子,
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() 返回的值动态初始化。
这意味着,全局对象可以被初始化两次:一次是静态初始化(即零初始化),然后是在运行时动态初始化。
【讨论】:
动态初始化是指在内存分配后分配给变量的第一个值在编译时是未知的,它仅在运行时进行评估。 例如
#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是一个全局变量,通过函数cube动态分配了一个数字n,其中cube()执行一个数字的立方。
这是一个动态初始化的例子。
【讨论】:
动态初始化意味着可以在运行时提供初始值。甚至类对象也可以动态初始化。 IE。使用运行时提供的值。 :-))
【讨论】: