Russian Qt Forum

Qt => Вопросы новичков => Тема начата: 0...-5 от Август 20, 2012, 22:36



Название: QMap::lowerBound()
Отправлено: 0...-5 от Август 20, 2012, 22:36
Здравствуйте!
Наткнулся на некоторую странность. Есть контейнер вида QMap<float, MyClass> container. При попытке получить итератор вызовом
Код:
QMap<float, MyClass>::const_iterator i = container.lowerBound(float value)
Получаю предупреждение:
"'update' may be used uninitialized in this function". Подобное предупреждение получаю только для релизной сборки. Если заменить lowerBound() на find() или upperBound() warning исчезает.
P.S: переменная update относится к внутренней реализации QMap:
Код:
template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator
QMap<Key, T>::lowerBound(const Key &akey) const
{
    QMapData::Node *update[QMapData::LastLevel + 1];
    mutableFindNode(update, akey);
    return const_iterator(update[0]->forward[0]);
}
Сталкивался ли кто-нибудь с подобными вещами?


Название: Re: QMap::lowerBound()
Отправлено: andrew.k от Август 21, 2012, 15:30
Странно, на upperBound тоже должен ругаться.
Вполне адекватный ворнинг компилятора:
Код
C++ (Qt)
template <class Key, class T>
Q_OUTOFLINE_TEMPLATE QMapData::Node *QMap<Key, T>::mutableFindNode(QMapData::Node *aupdate[],
                                                                  const Key &akey) const
{
   QMapData::Node *cur = e;
   QMapData::Node *next = e;
 
   for (int i = d->topLevel; i >= 0; i--) {
       while ((next = cur->forward[i]) != e && qMapLessThanKey<Key>(concrete(next)->key, akey))
           cur = next;
       aupdate[i] = cur;
   }
   if (next != e && !qMapLessThanKey<Key>(akey, concrete(next)->key)) {
       return next;
   } else {
       return e;
   }
}
 

Кто-то поленился его убрать.