zoukankan      html  css  js  c++  java
  • 诡异的循环

    今天在公司看到一段代码,如下:

    for(TArray<tstring>::TIterator it(textureNames); it; ++it)
        {
            if(_tcsicmp((*it).c_str(), szName) == 0)
                return it.getIndex();
        }
        //  other operation

    刚开始并不觉得有什么,很正常的for循环,但在我要向下翻得时候突然间觉得好像问题,这个循环什么时候结束呢?看来只有在return的时候结束了,因为如果迭代器it最多会指向textureNames最后一个元素的下一个的位置,但it也不为空呀。那么问题来了,怎么在逻辑上保证每次都能找到呢?就算每次都能找到,那for循环后面的代码岂不是永远都没有机会执行了?怎么突然觉得自己用了这么多年的for循环好像很陌生,就去查了下手册,在执行每次操作之前,都会判断第二个语句是否为true。突然想到难道这个类重载了bool操作?于是去找了一下,果然是这样的。

    下面是我自己的测试程序:

    class TestObj
    {
    public:
        TestObj(bool data = true): m_data(data) { }
        operator bool() const
        {
            return m_data;
        }
    
    private:
        bool m_data;
    };
    
    int main()
    {
        TestObj data;
        if (data)
        {
            cout<<"should bool"<<endl;
        }
        data = false;   // 会隐式转换的
        for (; data;)
        {
            cout<<"not excute"<<endl;
        }    
        return 0;
    }

    对于这个问题,网上也有其他的文章点击查看。就我本人的观点是不建议这么做的,因为会让其他看代码的人莫名其妙。

  • 相关阅读:
    CH the luckiest number 欧拉函数 同余
    bzoj1257余数求和 数论分块 暴力
    luogup1463 反素数
    CH3101 阶乘分解
    T10396 曹老板斗地主(中度模拟)
    NOIP 2015子串(DP)
    CF1205B Shortest Cycle(Floyd判最小环)
    P2055 [ZJOI2009]假期的宿舍(二分图匹配)
    灾后重建(最短路)
    CF1098A Sum in the tree(贪心)
  • 原文地址:https://www.cnblogs.com/benjaming/p/8432166.html
Copyright © 2011-2022 走看看