簡體   English   中英

為什么這個迭代器比較失敗?

[英]Why does this iterator comparison fail?

請看以下代碼:

if((pos = find()) != _sym.end())
{
    // do stuff
}

posstd::vector<T>::const_iterator類型的作用域變量,其中T是包含一對相同類型迭代器的 POD 結構。

_symstd::vector<T>類型的私有類成員變量。

示例代碼引發運行時斷言錯誤,並顯示消息Expression: vector iterators incompatible under Visual Studio 2013。錯誤發生在<vector>的第 240 行。

另一方面,如果我重新編寫代碼:

pos = find();
if(pos != _sym.end()) // do stuff

然后,迪斯科。

我相當確定將初始化的迭代器(例如end() )與未初始化的迭代器進行比較會導致此斷言; 我不明白的是,當執行比較運算符時,是否/如何不考慮pos處於初始化狀態。

這可能是相關的。

為什么我得到“向量迭代器不兼容”?

我不認為 find() 會改變 _sym.end()?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM