-2
請參閱以下代碼:爲什麼此迭代器比較失敗?
if((pos = find()) != _sym.end())
{
// do stuff
}
pos
是std::vector<T>::const_iterator
類型的範圍的變量,其中T
是含有一對相同類型的迭代器的POD結構。
_sym
是std::vector<T>
類型的私有類成員變量。
示例代碼拋出與消息Expression: vector iterators incompatible
的Visual Studio 2013中<vector>
發生該錯誤下一個運行時斷言誤差在管線240
在另一方面,如果我重新寫的代碼:
pos = find();
if(pos != _sym.end()) // do stuff
然後,迪斯科。我很確定比較初始化的迭代器(如end()
)和未初始化的迭代器會導致此斷言;我不明白的是,在比較運算符執行時,如何/如何在初始化狀態下不考慮pos
。
你顯示的代碼是不相關的。請準備一個重現問題的代碼。 –
你試過其他編譯器嗎?提供SSCCE會很好。這可能是一個VS bug/thingy。我會說VS被偶爾遇到過類似的麻煩。我想我有兩次看到它拒絕編譯適當的代碼,這有點複雜。 – luk32
如果可能是操作順序。在第一個函數中,'_sym.end()'可以在'find()'之前被調用,在第二個函數中,find()總是被首先調用。 –