C ++中奇怪的引用行为

44

我有一个简短的问题:

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

这种行为使我发疯……内幕发生了什么?

本杰明·林德利(Benjamin Lindley)

当您推回向量时,如果向量没有分配足够的内存来存储新元素,它将分配一个新的更大的内存块,将这些元素移到上方,并释放旧的内存。如果发生这种情况,则对向量元素的任何引用或指针都将无效。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++结构中的奇怪行为

来自分类Dev

c + +多态性:segfault和引用数组的奇怪行为

来自分类Dev

C#中奇怪的Regex行为

来自分类Dev

std :: cout在C ++中的奇怪行为

来自分类Dev

C#中左移的奇怪行为

来自分类Dev

C#中奇怪的COM对象行为

来自分类Dev

c,fclose(),remove(),rename()中的奇怪行为

来自分类Dev

关于C ++中构造函数的奇怪行为

来自分类Dev

C ++中的if语句行为真的很奇怪

来自分类Dev

C ++中的双重行为很奇怪

来自分类Dev

C#中奇怪的委托行为

来自分类Dev

C ++宏中相互引用的奇怪结果

来自分类Dev

C#和C ++中反向循环的奇怪行为

来自分类Dev

C ++中的函数指针转换中的奇怪行为

来自分类Dev

C ++ OstringStream奇怪的行为

来自分类Dev

C ++ io的奇怪行为

来自分类Dev

C ++奇怪的数组行为

来自分类Dev

C ++ io的奇怪行为

来自分类Dev

C ++ for循环奇怪的行为

来自分类Dev

C scanf 奇怪的行为

来自分类Dev

C:feof的奇怪行为

来自分类Dev

模板方法构造函数中的C ++奇怪行为

来自分类Dev

在C#中执行多线程活动的奇怪行为

来自分类Dev

Ternery运算符在C ++中的奇怪行为

来自分类Dev

gcc 4.8.1中c ++ 11线程的奇怪行为

来自分类Dev

C#中带有联合的奇怪解组行为

来自分类Dev

C ++中类析构函数的奇怪行为

来自分类Dev

C ++ 14中noexcept指定符的奇怪行为

来自分类Dev

在C中打印数组时出现奇怪的行为?