我有一个非常简短的问题:
vector<int> ints{1,2,3,4};
int &y = ints[0];
// ints.push_back(y);
y = 5;
for (auto &x : ints) {
cout << x << ", ";
}
为什么当你加入注释后,你会得到
5,2,3,4
,但当你取消注释ints.push_back(y);
时,你会得到1,2,3,4,1
。为了更清楚地表明问题,我会再写一遍:你得到的是[-->1<--], 2, 3, 4, 1
,而不是5,2,3,4,1
甚至5,2,3,4,5
。这种行为让我发疯......底层发生了什么?
std::vector::push_back()
接受的是一个副本,而不是一个引用。 - πάντα ῥεῖ