C++ C++;使用数据数组聚合初始化器行为

C++ C++;使用数据数组聚合初始化器行为,c++,data-structures,aggregate-initialization,C++,Data Structures,Aggregate Initialization,当改变数据数组的顺序时,data似乎总是由聚合初始值设定项初始化的数据(而不是alter)。为什么? 编译器不是应该将第一个有效内存块作为初始值设定目标吗 首先,我有一个SqList类和一个重载运算符 如果我交换数据顺序并在SqList中进行更改,data总是用{1,2,3,4,5}初始化 不,这不是观察到的行为。参见这两个版本:vs 当你在类声明中交换行时,在使用C++的“代码>操作程序的过载定义中,你确实应该使用 STD::vector < /Cord>,并且远离固定长度的C数组。如果你想控

当改变数据数组的顺序时,
data
似乎总是由聚合初始值设定项初始化的数据(而不是
alter
)。为什么?

编译器不是应该将第一个有效内存块作为初始值设定目标吗

首先,我有一个SqList类和一个重载运算符 如果我交换数据顺序并在
SqList
中进行更改,
data
总是用
{1,2,3,4,5}
初始化

不,这不是观察到的行为。参见这两个版本:vs


当你在类声明中交换行时,在使用C++的“代码>操作程序的过载定义中,你确实应该使用<代码> STD::vector < /Cord>,并且远离固定长度的C数组。如果你想控制这些值的位置,那么就要实现一个构造函数。你在这里问了很多C++,知道你想要什么。@ Tdman在C++中使用固定数组没有什么错。但是,最好对它们使用

std::array
,而不是旧的C语法。@RemyLebeau你说“没有错”,但我在堆栈溢出上看到的只是人们溢出数组,无法正确初始化成员,否则会弄乱那些
std::vector
会自动为你做的事情。好吧,这些行的最初目的是为了在阅读后练习一些数据结构教科书。谢谢。我期待着你的结果。但不知何故,我最终提出了这个问题。警告随着这个
sqlists{0,1,2,3,4,5},{1,2,3,4,5},5}而消失
struct SqList
{
   ElemType alter[MAXSIZE];
   ElemType data[MAXSIZE];//swap order here
   int Length;
};
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;
}
int main()
{
    SqList s{1,2,3,4,5};
    cout<<s;
}