我们有以下代码:
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。