以下作品:
struct A {
int i;
int v;
};
std::initializer_list<A> getList() {
return {A{0,1}, A{2,3}};
}
int main() {
auto list = getList();
}
我可以验证列表的内容是否正确。
但是,如果我将成员更改v
为 a std::vector
,它将不起作用:
struct A {
int i;
std::vector<int> v;
};
std::initializer_list<A> getList() {
return {A{0,{1,2}}, A{3,{4,5}}};
}
在这种情况下,返回的列表包含垃圾值。
我知道标准说复制 a 时不会复制底层对象std::initializer_list
。这是这里发生的事情吗?
为什么它在第一个示例中起作用?是运气吗?当列表中的对象包含 a 时,是否有什么特别之处std::vector
?