gpt4 book ai didi

c++ - 我应该将什么设置为 _ITERATOR_DEBUG_LEVEL

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:56 24 4
gpt4 key购买 nike

我正在研究 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( Release模式)。如果我切换到 Debug模式,它就会启用,因为 _ITERATOR_DEBUG_LEVEL = 2

我的问题是:

  1. 这是 MSVC 的东西还是标准?
  2. 即使在 Release模式下,为什么有人要使 _ITERATOR_DEBUG_LEVEL = 0。是不是应该捕获而不是进入静默模式的未定义行为!?我的意思是,如果该 block 内部的条件确实满足,则可能会导致很多问题。

最佳答案

  1. 根据标准,越界插入具有未定义的行为,所以是的,这是 MSVC 的事情。

  2. 因为它会影响性能。

关于c++ - 我应该将什么设置为 _ITERATOR_DEBUG_LEVEL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36357356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com