首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

结构体数组初始化有关问题

2013-04-20 
结构体数组初始化问题在书上看到类似这么一段代码,有点疑问,请教一下大家。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}};

热点排行