下面是代码,
std::stringstream os;
for (size_t i = 0U; i < len; i++) {
os << static_cast<uint32_t>(src[i]);
}
Warning is: "advisory Rule 14-8-2, Viable set contains both function and template: std::basic_ostream::operator<<"
下面这行代码
os << static_cast<uint32_t>(src[i]);
请建议如何解决相同的问题,我是 c++ 的新手,并且确定相同。
最佳答案
Misra 警告被触发是因为 basic_ostream
定义一个成员 operator<<
这是一组非模板重载,也是一组 free function template版本。正如警告所说,重载决议的候选集包括这两者 - 函数模板和非模板。
你的选择是要么抑制这一行的警告,要么想办法不使用 operator<<
执行格式化输出。后者可以通过创建数字的中间字符串表示,然后使用 basic_ostream::write
来完成。输出字符。如果你有 C++11 编译器,你可以使用 std::to_string
做这个。
auto s = std::to_string(42U);
std::stringstream ss;
ss.write(s.c_str(), s.size());
如果你不能使用to_string
,或者需要额外的格式,总有 s(n)printf
用于创建字符串表示。
我个人的意见是取消该警告,理由是您使用的是标准库中定义明确且众所周知的类型。
关于c++ - MISRA C++ 2008 奇怪警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21449645/