关于POD和非POD类型中,list initialization和constructor initialization(未解决)
- 如果你的成员是POD类型的,那么list initialization和constructor initialization没有任何区别
#include<iostream>
using namespace std;
class A
{
int a;
double b;
A() :a(0), b(0.0)//结构体初始化
{
}
A(int a_in, double b_in) :a(a_in), b(b_in)//结构体初始化
{}
~A() {}
};
class B
{
int a;
double b;
B()//列表初始化
{
a = 0;
b = 0.0;
}
B(int a_in, double b_in)//列表初始化
{
a = a_in;
b = b_in;
}
~B() {}
};
int main()
{
system("pause");
}
- 但是成员变量的类型是非POD类型,比如自定义类型,那么list inlitialization的代码就会变成
#include<iostream>
using namespace std;
struct A
{
int a;
A() { ; }
A(int a_in) :a(a_in)
{ }
};
struct B
{
double b;
B() {}
B(double b_in):b(b_in)
{ }
};
class D
{
A a1;
B b1;
//D(int a, double b) :a1(a), b1(b)//结构体初始化,这个也是正确的
//{}
D(int a, double b)//列表初始化
{
a1 = a;//这里如果不给A B写无参构造函数会出错
b1 = b;
}
};
int main()
{
system("pause");
}
但是这里仍旧不知道列表初始化和结构体初始化的区别以及运算时间的长短

浙公网安备 33010602011771号