[英]Why does this iterator comparison fail?
请看以下代码:
if((pos = find()) != _sym.end())
{
// do stuff
}
pos
是std::vector<T>::const_iterator
类型的作用域变量,其中T
是包含一对相同类型迭代器的 POD 结构。
_sym
是std::vector<T>
类型的私有类成员变量。
示例代码引发运行时断言错误,并显示消息Expression: vector iterators incompatible
under Visual Studio 2013。错误发生在<vector>
的第 240 行。
另一方面,如果我重新编写代码:
pos = find();
if(pos != _sym.end()) // do stuff
然后,迪斯科。
我相当确定将初始化的迭代器(例如end()
)与未初始化的迭代器进行比较会导致此断言; 我不明白的是,当执行比较运算符时,是否/如何不考虑pos
处于初始化状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.