我正在挖掘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
。
我的问题是:
_ITERATOR_DEBUG_LEVEL = 0
。是不是应该捕获的未定义行为而不是静默模式!?我的意思是如果该块内的条件确实满足,可能会导致许多问题。答案 0 :(得分:2)
根据标准,out of bounds insert具有未定义的行为,所以是的,它是MSVC的东西。
因为它会影响性能。