首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决此MISRA警告: C++

如何解决此MISRA警告: C++
EN

Stack Overflow用户
提问于 2014-01-30 16:07:43
回答 7查看 1.7K关注 0票数 4

代码如下:

代码语言:javascript
复制
  std::stringstream os;

  os << std::hex; // MISRA warning on this line
  os << std::setw(2);
  os << std::setfill('0');

警告:“必需的规则8-4-4,使用的函数标识符不带'&‘或带括号的参数列表”

我无法解决此问题,请提出解决方案。

EN

回答 7

Stack Overflow用户

发布于 2014-01-30 16:27:25

按照警告所说的做:获取函数的地址:

代码语言:javascript
复制
os << &std::hex;
票数 6
EN

Stack Overflow用户

发布于 2014-01-30 16:26:48

像建议的那样直接使用&怎么样?

代码语言:javascript
复制
#include <iomanip>
#include <iostream>
#include <sstream>

int main() {
    std::stringstream os;

    os << &std::hex; // Works with &
    os << std::setw(2);
    os << std::setfill('0');
    os << 13;

    std::cout << os.str() << "\n";
    return 0;
}

是的,it works too

有什么不同?

  • std::hex是对function
  • &std::hex的引用是对

函数的指针

由于对函数的引用具有指向函数的指针的隐式转换,因此您可以将这两个函数中的任何一个传递给ostream,它将按预期工作。显然,MISRA要求您明确说明您的意思是我想要这个函数还是我想调用这个函数。

票数 5
EN

Stack Overflow用户

发布于 2014-01-30 16:36:27

你可以做到

代码语言:javascript
复制
std::hex(std::cout);

这相当于

代码语言:javascript
复制
std::cout << std::hex;

这将消除警告。或者,使用

代码语言:javascript
复制
std::cout << &std::hex;

但这看起来真的很丑陋,尽管它是正确的。

底线是,MISRA在这里是“错误的”/尴尬的/意想不到的。可以像您一样使用std::hex,没有任何问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21450882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档