当前位置:   article > 正文

c++中数组的初始化规则_c++数组对数组内的类进行初始化

c++数组对数组内的类进行初始化

数组的初始化

全局数组

对于内置数据类型,没有被显示初始化的元素会被默认初始化为0,对于整型数据,就是0,对于指针,会被初始化为nullptr;
以下代码都是基于visual studio2019

int arr[10];
int* p[10];

int main()
{
    if (arr[0] == 0)
        cout << arr[0] << endl; //0
    if (!p[0])
        cout << p[0] << endl; //00000000
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

对于类类型,没有被显示初始化的元素将会使用类的默认构造函数进行初始化,该类一定要有默认构造函数,否则会报错;

class A {
public:
    A(int a_) :a(a_) {}
    int a;
};  //该类没有默认构造函数
class B {
public:
    B(){
		cout<<"default constructor"<<endl;
	}
    B(int a_) :a(a_) {}
    int a;
};  //该类含有默认构造函数
//A arr[10]; //取消注释将会报错
B arr_[10]; //将会打印10遍 "default constructor"
int main()
{
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

局部数组

对于内置类型,在数组定义时,如果没有提供任何初始值,那么数组的值将是未定义的,与分配的内存有关;如果提供的初始值小于数组维度,那么剩下的元素会被默认初始化为0;

int main()
{
    int arr[10] = {0};
    int arr_[10];
    cout << arr[1] << endl; // 0
    cout << arr_[1] << endl; //-858993460
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

对于类类型,没有被显示初始化的元素将会使用类的默认构造函数进行初始化,该类一定要有默认构造函数;

class A {
public:
    A(int a_) :a(a_) {}
    int a;
};  //该类没有默认构造函数
class B {
public:
    B(){
		cout<<"default constructor"<<endl;
	}
    B(int a_) :a(a_) {}
    int a;
};  //该类含有默认构造函数
int main()
{ 
    A a(10);
    //A arr[10] = { a }; //取消注释,将会报错
    B b(10);
    B arr_[10] = {b};
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/44398
推荐阅读
相关标签
  

闽ICP备14008679号