C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 修改vector之后对vector.back()的引用的奇怪行为大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们从C中的示例代码开始:
#include <vector>
#include <iostream>

int main()
{
    std::vector<int> vec;
    vec.push_BACk(0);
    for (int i = 1; i < 5; i++)
    {
        const auto &x = vec.BACk();
        std::cout << "Before: " << x << ",";
        vec.push_BACk(i);
        std::cout << "After: " << x << std::endl;
    }
    return 0;
}

代码用g test.cc -std = c 11 -O0编译,结果如下:

Before: 0,After: 0
Before: 1,After: 0  
Before: 2,After: 2
Before: 3,After: 3

我期待第二行输出

Before: 1,After: 1

因为x是对向量中的项的引用,不应通过将项附加到向量来修改该项.

但是我现在还没有阅读反汇编代码或进行任何其他调查.此外,我不知道这是否是语言标准中的未定义行为.

我想要解释一下.谢谢.

解决方法

push_back可以导致重新分配,如果我们查看 draft C++ standard部分23.3.6.5向量修饰符说:

我们可以看到back给了我们一个,所以如果有重新分配它将不再有效.

大佬总结

以上是大佬教程为你收集整理的c – 修改vector之后对vector.back()的引用的奇怪行为全部内容,希望文章能够帮你解决c – 修改vector之后对vector.back()的引用的奇怪行为所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。