为什么if-case是真的?!
typedef std::set< boost::shared_ptr<CCall>, HasFirstQueuedLongerTime> queued_container;
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd ) //<-- is true
queued
为空std::set
,spCall
是指向对象的共享指针。由于queued
为空,因此find函数应返回等于queued.end()
...
我在vs2005上进行编译和调试。我可以看到itTemp
和itTempEnd
指向同一地址。
感谢所有答案!
更多代码信息,在if语句之前声明以下内容:
queued_container queuedCalls;
const boost::shared_ptr<CCall> &spCall; //spCall is valid according to debug info.
struct HasFirstQueuedLongerTime : std::binary_function < boost::shared_ptr<CCall>, boost::shared_ptr<CCall>, bool> {
bool operator() (const boost::shared_ptr<CCall>& lhs, const boost::shared_ptr<CCall>& rhs) const
{
return lhs->CreatedTime() < rhs->CreatedTime(); //returns true if lhs queued longer time than rhs
}
};
我真正的可执行代码:
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd )
AS_ERROR(1, "XXX", "ERROR: Already added to queue container.");
queued.insert(spCall);
CCallQueue::insert(spCall);
聚苯乙烯。很抱歉有很多编辑..
答案 0 :(得分:1)
问题解决了!
itTemp != itTempEnd
从来都不是真的! AS_ERROR下面的函数是一个带有多个语句的“#define-function”。所以第一个声明从未执行,但第二个是。