为什么相同的代码在Visual Studio和Dev中以不同的方式运行

这个问题在这里已经有了答案:

  • 迭代器失效规则4个答案

  • 这是因为在调用v.assign()之后使用迭代器来分配无效迭代器时发生未定义的行为,因此在调用之后使用迭代器是一个坏主意。

    有趣的是,VS在分配调用之后重用了相同的底层内存(它仍然获得了容量为10的相同地址,但是新的大小为3),但是它有一个名为Debug Iterators的功能。 启用此功能时,由于它是默认的Debug版本,所以它存储有效迭代器的列表,因此知道您的迭代器已失效并很好地告诉您。 在更快的Release版本中,它不运行这些检查,因此它具有未定义的行为,但恰巧打印出正确的值。

    一个不太复杂的迭代器调试机器的编译器不会做到这一点,你会得到未定义的行为(以最可怕的方式表现出来 - 通过完成你期望的)

    如果你碰巧存储了一个指向第一个元素的指针,那么即使调试迭代器也不会帮助你,你可能会得到你期望打印的值,但它仍然是未定义的行为!

    链接地址: http://www.djcxy.com/p/73345.html

    上一篇: Why does the same code run differently in Visual Studio and Dev

    下一篇: Erase all even numbers from vector using find