【问题标题】:What should I set to _ITERATOR_DEBUG_LEVEL我应该将什么设置为 _ITERATOR_DEBUG_LEVEL
【发布时间】:2016-04-01 13:15:14
【问题描述】:

我正在挖掘 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。是不是应该捕获而不是置于静默模式的未定义行为!?我的意思是,如果该块内部的条件满足,它可能会导致很多问题。

【问题讨论】:

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


    【解决方案1】:
    1. 根据标准,越界插入具有未定义的行为,所以是的,它是 MSVC 的事情。

    2. 因为它会影响性能。

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2020-01-31
      相关资源
      最近更新 更多