0

我们有以下代码:

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
        }
    }
};

这会在应用 MISRA C++ 2008 规则时从 QA-C 代码检查器中产生以下错误,突出显示msg_id有问题的标记:

05-0-03 复合式が暗黙的に异なる复型へ変换されています。</p>

或者用英语:

复杂表达式被隐式转换为不同的内在类型。

根据此处的PDF,更全文是:

cvalue 表达式不应隐式转换为不同的基础类型

但是,实现std::map::find()只是:

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

key_type应该在哪里uint8_t。这是工具中的错误,还是我遗漏了什么?

gcc请注意,该工具显然使用当前安装的 5.4.0。

4

0 回答 0