结构体数组初始化问题在书上看到类似这么一段代码,有点疑问,请教一下大家。struct A{int v1int v2}struct
结构体数组初始化问题
在书上看到类似这么一段代码,有点疑问,请教一下大家。
struct A
{
int v1;
int v2;
}
struct A array[] =
{ 1,2,3,4,};
第一个问题,定义array数组的时候,为什么又出现了struct关键词,一般都不写的吧。。。
第二个问题,这段代码的结果是array里面有两个元素
aray[0].v1=1,array[0].v2=2,
aray[1].v1=3,array[1].v2=4
我感觉应该和合成默认构造函数有关,因为如果我自己定义一个默认构造函数
A() : v1(1), v2(1) {}编译器就会报错。
或者定义一个这样的构造函数
A(int a = 1, int b = 1) : v1(a),v2(b) {}
程序运行的结果就是array中有四个元素。
array[0].v1=1,array[0].v2=1,
array[1].v1=2,array[1].v2=1,
array[2].v1=3,array[2].v2=1,
array[3].v1=4,array[3].v2=1,
编译器合成的构造函数到底是什么样的呢?
struct 构造函数 数组
[解决办法]>> 第一个问题,定义array数组的时候,为什么又出现了struct关键词,一般都不写的吧。。。
不用加 struct,这是典型的 c 转 c++ 后遗症。
>> 第二个问题,这段代码的结果是array里面有两个元素
这个叫 aggregate initialization,默认行为就是挨着码。加了自己的默认构造函数后,这个类就不叫 aggregate 了,因此后面就不执行 aggregate initialization 了,而是 list initialization 了,后者的行为是用每一个 initializer 初始化一个对应的元素,因此生成了 4 个元素。其实老老实实的写清楚是最好的,像这样
A array [2] = {{1,2},{3,4}};