C++的默认结构函数
1、每个类必需有一个结构函数,不然没法建设工具;
2、若programer没有提供任何结构函数,则C++提供一个默认的结构函数,该默认结构函 数是无参结构函数,它仅认真建设工具,不做任何初始化的事情;
3、只要programer界说了一个结构函数(不管是无参照旧有参结构),C++就不再提供默 认的默认结构函数。即假如为类界说了一个带参的结构函数,还想要无参结构函数,就必需 本身界说;
4、与变量界说雷同,在用默认结构函数建设工具时,假如建设的是全局工具或静态工具 ,则工具的位模式全为0,不然,工具值是随机的。
注:2所述,C++在某些环境下会提供默认结构函数,但在某些环境下并不会自动挪用。
实事上,当用户没有提供自界说的结构函数的时候,声明该类的工具,以及界说包括该对 象的数组,都不会挪用默认结构函数;但界说包括该工具的容器时,会自动挪用默认的结构 函数。
举譬喻下:
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
class Student
{
public:
// Student() : val(6){} // 1
// Student(int val) : val(6){} // 2
int val;
};
void main()
{
Student s;
cout << s.val; // 编译通过,但运行时堕落:the variable 's' is being used without being defined.
// 说明没有挪用默认结构函数
Student arr[4];
cout << arr[2]; // 编译通过,但运行堕落:the variable 'arr' is being used without being defined.
// 说明没有挪用默认结构函数
vector<Stu> vec(5);
cout << vec[3].val << endl; //运行无误,但输出功效未界说(取 决于编译器,大概是随机值或0)
// 说明挪用了默认结构函数
Student *ptr = new Student[4];
cout << ptr[1].val; //运行无误,但输出功效未界说(取决于编译器,可 能是随机值或0)
// 说明挪用了默认结构函数
Student ss = Student(); // 显示挪用
cout << ss.val; // 运行无误,但输出功效未界说(取决于编译器,大概是 随机值或0)
// 说明挪用了默认结构函数
}
若将Student界说体中的注释1去掉,即自界说无参结构函数,则main函数中的几种形式的 工具界说城市挪用该自界说的无参结构函数;
但只将注释2去掉,即自界说带参结构,而不提供无参结构,则main函数的几种形式的对 象界说都将因为没有可用的默认结构函数而编译堕落。