Class A
{
public:
int a;
int b;
int c;
A(int temp);
}
A::A(int temp)
{
a = 0;
b = temp;
c = 0;
}
void func(A temp)
{
return;
}
假如使用:
A test = 3;
A test2 = {4};
func(3);
都会使得数字被编译器隐式转换成一个临时的类对象。如果要阻止系统进行隐式的类型转换,就需要在对应的构造函数前加上explicit。例如:
Class A
{
public:
int a;
int b;
int c;
explicit A(int temp);
}
构造函数初始化列表:
Class A
{
public:
int a;
int b;
int c;
A(int tempa,int tempb,int tempc);
}
A::A(int tempa,int tempb,int tempc)
:a(tempa),b(tempb),c(tempc)
{
}
由于构造函数在函数内部赋值前,系统都会给成员变量进行一次随机的初始化,所以构造函数初始化列表可以去掉系统随机初始化的过程,又不需要赋值,提升了效率。无论初始化列表什么样的顺序,实际变量初始化的顺序由类定义中成员变量的声明顺序而定。