帮助我理解为什么当set为空时,find返回与std :: set上的end()不同的东西

时间:2010-12-09 15:25:21

标签: c++ boost std

为什么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::setspCall是指向对象的共享指针。由于queued为空,因此find函数应返回等于queued.end() ...

的迭代器

我在vs2005上进行编译和调试。我可以看到itTempitTempEnd指向同一地址。

感谢所有答案!

更多代码信息,在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);

聚苯乙烯。很抱歉有很多编辑..

1 个答案:

答案 0 :(得分:1)

问题解决了!

itTemp != itTempEnd

从来都不是真的! AS_ERROR下面的函数是一个带有多个语句的“#define-function”。所以第一个声明从未执行,但第二个是。