При изменении порядка массива данных кажется, что data
всегда инициализируется агрегатным инициализатором (не alter
). Почему?
struct SqList
{
ElemType alter[MAXSIZE];
ElemType data[MAXSIZE];//swap order here
int Length;
};
Разве компилятор не должен рассматривать первый допустимый блок памяти как цель инициализатора?
Прежде всего, у меня есть класс SqList и перегруженный оператор << для печати содержимого. </p>
struct SqList
{
ElemType data[MAXSIZE];
ElemType alter[MAXSIZE];
int Length;
};
ostream& operator<<(ostream& os,const SqList& sql)
{
for(auto i:sql.data)
os<<i<<" ";
os<<"\n";
for(auto i:sql.alter)
os<<i<<" ";
os<<"\n";
return os;
}
В main () экземпляр SqList создается с агрегатным инициализатором
int main()
{
SqList s{1,2,3,4,5};
cout<<s;
}
Интересно видеть, что если я поменяю местами порядок data
и alter
в SqList
, data
всегда инициализируется с {1,2,3,4,5}
Здесь - код, если вы заинтересованы.
исследование компилятора