如何在不违反MISRA C++ 2008要求规则5-2-12的情况下在std :: map中插入项目?

Mat*_*tin 1 c++ misra

我在PC-Lint(au-misra-cpp.lnt)中收到此错误:

错误1960 :(注意 - 违反MISRA C++ 2008必需规则5-2-12,传递给期望指针的函数的数组类型)

在这段代码上:

_IDs["key"] = "value";
Run Code Online (Sandbox Code Playgroud)

_ID声明为:

std::map<std::string,std::string> _IDs;
Run Code Online (Sandbox Code Playgroud)

也尝试改为:

_IDs.insert("key","value");
Run Code Online (Sandbox Code Playgroud)

但得到同样的错误.

如何让代码符合misra?

sla*_*ppy 6

违反的规则是调用std::string::string(const CharT* s, const Allocator& alloc = Allocator()),它将衰减char const []为char指针.

我认为,解决方案是明确地转换为指针类型:

_IDs[static_cast<char const *>("key")] = static_cast<char const *>("value");

但是,我建议不要使用(或至少升级)在您实际使用时发出警告的短绒std::string.

另请注意,您无法std::map::insert按照尝试的方式拨打电话.没有直接接受密钥和值的重载,而是存在一个由密钥和值组成的对的重载.请参见此处的过载编号1.

  • 很明显,遵循MISRA如何生成易于阅读和易于维护的代码:-P (5认同)