繁体   English   中英

数组何时自动初始化为其默认数据类型?

[英]When is an array automatically initialized to it's default datatype?

编译器何时将 arrays 自动初始化为其默认数据类型?

我知道在这个例子中 arrays 将被初始化,除了我期待( 在这里阅读\0 char 值而不是在我的控制台中有spaces (至少这是我认为的,因为什么都没有)。

#define MAX_LENGTH 25

// Array global
int vector[MAX_LENGTH];
char vector_char[MAX_LENGTH];

int main()
{
    //Print int array
    for(int i = 0;i < MAX_LENGTH; i++)
    {
        cout << vector[i] << " ";                        // All outputs 0
    }
    cout << endl;

    //Print char array and output text to see that there is 
    //Something printed
    cout << "start";
    for(int i = 0;i < MAX_LENGTH; i++)
    {
        cout << vector_char[i] << " ";                     //All outputs...
    }
    cout <<"end"<< endl;
    return 0;
}

我遇到的其他两种情况是当数组位于 function 内部时(其中的值将是“垃圾”或“不可预测”,例如:

int main()
{
    int internal_vector[MAX_LENGTH];

    for(int i = 0;i < MAX_LENGTH; i++)
    {
        cout << internal_vector[i] << " ";
    }
    cout << endl;
    return 0;
}

另一个当数组是 class 的成员时(如果您尝试任何操作,您会惊讶于数组将包含垃圾值:

class MyClass
{
private:
    int array[100];
...
}

那么,什么时候数组会自动初始化为它的默认数据类型,我什么时候应该让我自己的 function 来初始化每个元素?

全局对象有static 存储时长,它们会从头 初始化为零

对于每个具有 static 或that is not subject to constant initialization (since C++14)线程本地存储持续时间的命名变量,在任何其他初始化之前。

如果 T 是标量类型,则对象的初始值是显式转换为 T 的整数常量零。

如果 T 是数组类型,则每个元素都初始化为零

这意味着vector的所有元素将被初始化为0vector_char的所有元素将被初始化为'\0'

另一方面, internal_vector的所有元素将在默认初始化中初始化为不确定的值。

如果 T 是数组类型,则数组的每个元素都是默认初始化的;

否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定的值。

具有自动和动态存储持续时间的非类变量的默认初始化会产生具有不确定值的对象(静态和线程局部对象 初始化为零

请注意,对于array来说它有点复杂,它的存储持续时间取决于实例的声明方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM