我应该将什么设置为_ITERATOR_DEBUG_LEVEL

What should I set to _ITERATOR_DEBUG_LEVEL

本文关键字:ITERATOR LEVEL DEBUG 什么 设置 我应该      更新时间:2023-10-16

我在MSVC 2013中挖掘std::vector::insert实现,发现了以下代码:

#if _ITERATOR_DEBUG_LEVEL == 2
        if (_VICONT(_Where) != this
            || _VIPTR(_Where) < this->_Myfirst
            || this->_Mylast < _VIPTR(_Where))
            _DEBUG_ERROR("vector insert iterator outside range");
        _DEBUG_RANGE(_First, _Last);
 #endif /* _ITERATOR_DEBUG_LEVEL == 2 */

并且由于CCD_ 2(释放模式)而被禁用。如果我切换到调试模式,它将被启用,因为_ITERATOR_DEBUG_LEVEL = 2

我的问题是:

  1. 这是微软风投的事情还是标准
  2. 为什么有人会在发布模式下制作_ITERATOR_DEBUG_LEVEL = 0。这不是一个应该被捕捉而不是进入静音模式的未定义行为吗!?我的意思是,如果该区块内的条件得到满足,可能会引发许多问题
  1. 根据标准,越界插入有未定义的行为,所以是的,这是MSVC的事情。

  2. 因为它会影响性能。