2016-04-01 78 views
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

我的問題是:

  1. 這是MSVC的事情,或者它是一個標準呢?
  2. 即使在發佈模式下,爲什麼有人會製作_ITERATOR_DEBUG_LEVEL = 0。是不是一個未定義的行爲,應該被抓住,而不是放在靜音模式!?我的意思是,如果該塊內部的條件滿足,可能會導致很多問題。

回答

2
  1. 出界插入已按照標準定義的操作,所以是的,它是一個MSVC的事情。

  2. 因爲它會影響性能。

+0

哦!我根本沒有考慮表現。謝謝 –

相關問題