c++ - MISRA C++ 2008 奇怪警告

标签 c++

下面是代码,

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/

相关文章:

c++ - 如何将函数分配给采用 void * 类型参数的函数指针?

C++ 套接字对不读/写父/子

c++ - 查找具有最多不同字符的字符串

c++ - 模板类 C++

c++ - Apache 权限被拒绝连接到套接字

c++ - 如何为 7z 存档格式写入二进制数据?

c++ - std::vector 及其初始化指针一致性

C++ clock() 函数给出不正确的值

c++ - 如何从 header 声明中找到源代码?

主函数执行时的 C++ 堆栈溢出异常