- struct内部若定义的变量有类内初始值,则初始化该结构体的对象时,不能采用花括号的顺序初始化。
- 若struct内没有定义类内初始值,可以采用花括号顺序初始化结构体对象。
- struct不能采用圆括号直接初始化。
没有初始值的情况:
struct A{
int b;
int a;
};
A test{1,2};
std::cout<<test.a<<std::endl;//输出2
有类内初始值:
struct A{
int b;
int a=0;
};
A a{1,2};
//输出:no matching function for call to ‘main(int, char**)::A::A(<brace-enclosed initializer list>)’
没有构造函数,使用()初始化:
struct A{
int b;
int a;
};
A a(1,2);
//输出:no matching function for call to ‘main(int, char**)::A::A(int, int)’
要使用()初始化时,必须定义相应的构造函数:
struct A{
A(int ib,int ia):b(ib),a(ia){}
int b;
int a;
};
A a(1,2);
std::cout<<a.a<<std::endl;//输出2
struct A{
A(int ib,int ia):b(ib),a(ia){}
int b;
int a=3;
};
A a(1,2);
std::cout<<a.a<<std::endl;//输出2
因此,要是有类内初始值,必须给出构造函数以初始化结构体变量。