我在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?
违反的规则是调用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.