赞
踩
对于内置数据类型,没有被显示初始化的元素会被默认初始化为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;
}
对于类类型,没有被显示初始化的元素将会使用类的默认构造函数进行初始化,该类一定要有默认构造函数,否则会报错;
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; }
对于内置类型,在数组定义时,如果没有提供任何初始值,那么数组的值将是未定义的,与分配的内存有关;如果提供的初始值小于数组维度,那么剩下的元素会被默认初始化为0;
int main()
{
int arr[10] = {0};
int arr_[10];
cout << arr[1] << endl; // 0
cout << arr_[1] << endl; //-858993460
return 0;
}
对于类类型,没有被显示初始化的元素将会使用类的默认构造函数进行初始化,该类一定要有默认构造函数;
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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。