如何在不使用列表迭代器的情况下避免“不在所有代码路径上返回值”警告?

时间:2012-06-22 05:26:00

标签: c++ warnings compiler-warnings

假设我有一个包含值的对象。我希望从对象列表中获取具有特定值的对象索引。我使用下面的代码来做到这一点,

int MyClass::getIndex(list& somelist, int requiredValue)
{

    for( i=0; i != somelist.count(); ++i)
    {

        if(somelist.at(i)->value() == requiredValue)
            return i;
        else
            continue;
    }

return -1;
}

如何在不使用迭代器的情况下避免“不会在所有代码路径上返回值”警告?

2 个答案:

答案 0 :(得分:3)

在任何情况下都必须从函数返回T.如果列表中可能不存在该值,则可以选择:

  1. 返回默认值(例如,指针为nullptr,可能为整数为-1)
  2. 使用boost::optional<T>
  3. return end iterator:

    std::list<int>::iterator find_something(std::list<int> &my_list)
    {
         for (auto it = my_list.begin(); it != my_list.end(); ++it)
         { 
             if (cond)
             {
                 return it;
             }
         }
    
         return my_list.end();
    }
    
  4. 同时

    如果您只想找到某个值的迭代器,请使用std::find

    auto it = std::find(my_list.begin(), my_list.end(), my_value);
    

    <强>最后

    如果您需要按索引访问,请不要使用列表。在这种情况下使用向量

答案 1 :(得分:2)

这个问题的答案与“未找到元素时你想要发生什么?”的答案相同。