什么是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
是通过一个函数cube
dynamic分配的,其中cube()
执行数字的立方体。
这是dynamic初始化的一个例子。
dynamic初始化意味着可以在运行期间提供初始值。 即使类对象也可以dynamic初始化。 即在运行时提供的值。 :-))