【发布时间】: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。
我的问题是:
- 这是 MSVC 的东西还是标准?
- 为什么有人会在发布模式下创建
_ITERATOR_DEBUG_LEVEL = 0。是不是应该捕获而不是置于静默模式的未定义行为!?我的意思是,如果该块内部的条件满足,它可能会导致很多问题。
【问题讨论】: