代码如下:
std::stringstream os;
os << std::hex; // MISRA warning on this line
os << std::setw(2);
os << std::setfill('0');警告:“必需的规则8-4-4,使用的函数标识符不带'&‘或带括号的参数列表”
我无法解决此问题,请提出解决方案。
发布于 2014-01-30 16:27:25
按照警告所说的做:获取函数的地址:
os << &std::hex;发布于 2014-01-30 16:26:48
像建议的那样直接使用&怎么样?
#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要求您明确说明您的意思是我想要这个函数还是我想调用这个函数。
发布于 2014-01-30 16:36:27
你可以做到
std::hex(std::cout);这相当于
std::cout << std::hex;这将消除警告。或者,使用
std::cout << &std::hex;但这看起来真的很丑陋,尽管它是正确的。
底线是,MISRA在这里是“错误的”/尴尬的/意想不到的。可以像您一样使用std::hex,没有任何问题。
https://stackoverflow.com/questions/21450882
复制相似问题