gpt4 book ai didi

c++ - C++ 中奇怪的引用行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:55:59 25 4
gpt4 key购买 nike

我的问题很短:

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

这种行为让我抓狂……背后发生了什么?

最佳答案

当你推回一个 vector 时,如果 vector 没有分配足够的内存来存储新元素,它会分配一个新的更大的内存块,移动元素,并释放旧内存。如果发生这种情况,任何指向 vector 元素的引用或指针都会失效。

因此,在推回之后,当您将 5 分配给 y 时,这是未定义的行为,因为 y 是无效引用,并且没有理由期望赋值会对 vector 的任何元素产生任何影响。

关于c++ - C++ 中奇怪的引用行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31760634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com