我该怎么设置_ITERATOR_DEBUG_LEVEL

时间:2016-04-01 13:15:15

标签: c++ c++11 vector iterator

我正在挖掘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 */

并且因为_ITERATOR_DEBUG_LEVEL = 0(发布模式)而被禁用。如果我切换到调试模式,它将被启用,因为_ITERATOR_DEBUG_LEVEL = 2

我的问题是:

  1. 这是MSVC还是标准?
  2. 为什么有人会在发布模式下_ITERATOR_DEBUG_LEVEL = 0。是不是应该捕获的未定义行为而不是静默模式!?我的意思是如果该块内的条件确实满足,可能会导致许多问题。

1 个答案:

答案 0 :(得分:2)

  1. 根据标准,out of bounds insert具有未定义的行为,所以是的,它是MSVC的东西。

  2. 因为它会影响性能。

相关问题