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

What is dynamic initialization of object in c++?

本文关键字:动态 初始化 对象 c++ 什么      更新时间:2023-10-16

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

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

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

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是一个全局变量,一个数n通过函数cube动态地赋值给它,其中cube()执行一个数的立方体。

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

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