我应该将什么设置为_ITERATOR_DEBUG_LEVEL
What should I set to _ITERATOR_DEBUG_LEVEL
我在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 */
并且由于CCD_ 2(释放模式)而被禁用。如果我切换到调试模式,它将被启用,因为_ITERATOR_DEBUG_LEVEL = 2
。
我的问题是:
- 这是微软风投的事情还是标准
- 为什么有人会在发布模式下制作
_ITERATOR_DEBUG_LEVEL = 0
。这不是一个应该被捕捉而不是进入静音模式的未定义行为吗!?我的意思是,如果该区块内的条件得到满足,可能会引发许多问题
-
根据标准,越界插入有未定义的行为,所以是的,这是MSVC的事情。
-
因为它会影响性能。
相关文章:
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- NDK 构建中的异常"error: expected ';' after top level declarator"
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"
- 如何将STD :: Iterator与基本类型Uint8_t**使用