以下C ++代码令人惊讶地产生十进制输出,显然忽略了对setf()
的调用和打印true 42
。使用std::setiosflags()
给出相同的结果。但是,使用std::cout << std::hex
确实会产生预期的输出true 0x2a
,因此std::ios::showbase
和std::ios::boolalpha
会受到尊重。
我在UOSntu上测试了G ++ 5.4,在CentOS上测试了G ++ 7.2.1。我在这里缺少什么?
#include <sstream>
#include <iostream>
#include <iomanip>
#include <iterator>
int main()
{
std::cout.setf(std::ios::hex | std::ios::showbase | std::ios::boolalpha);
// Uncommenting the line below doesn't make a difference.
//std::cout << std::setiosflags(std::ios::hex | std::ios::showbase | std::ios::boolalpha);
// Uncommenting this line does give the desired hex output.
//std::cout << std::hex;
int m = 42;
std::cout << true << ' ' << m << std::endl;
return 0;
}