станд :: Карта:: find () предупреждение от MISRA C ++ - PullRequest
0 голосов
/ 29 мая 2019

У нас есть следующий код:

class Foo {
    std::map<const uint8_t, double> m_throttle;
    // ...
    void bar(const uint8_t &msg_id)
    {
        if (m_throttle.find(msg_id) == m_throttle.end())
        {
            // Whatever
        }
    }
};

Это приводит к следующей ошибке проверки кода QA-C при применении правил MISRA C ++ 2008, выделяя msg_id в качестве проблемного токена:

05-00-03

или на английском языке:

Комплексвыражения неявно преобразуются в различные внутренние типы.

Согласно PDF здесь , более полный текст:

Выражение cvalue не должно быть неявнопреобразован в другой базовый тип

Однако реализация std::map::find() просто:

iterator
find(const key_type& __x)
{ return _M_t.find(__x); }

Где key_type должно быть uint8_t.Это ошибка в инструменте, или мне чего-то не хватает?

Обратите внимание, что инструмент использует установленный в настоящее время gcc, по-видимому, это 5.4.0.

...