2
我在std::vector::insert
實施MSVC 2013挖我發現這個代碼:我應該設置爲_ITERATOR_DEBUG_LEVEL
#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
。是不是一個未定義的行爲,應該被抓住,而不是放在靜音模式!?我的意思是,如果該塊內部的條件滿足,可能會導致很多問題。
哦!我根本沒有考慮表現。謝謝 –