在 setiosflags 函数中使用十六进制标志
Using hex flag inside setiosflags function
int a=60;
cout<<setiosflags(ios::hex|ios::showbase|ios::uppercase);
cout<<a<<endl;
上面的代码不起作用,但如果我使用
cout<<hex
然后
cout<<setiosflags(ios::showbase|ios::uppercase)
那么它正在工作
为什么?以及我怎么知道哪个可以在 setiosflags() 中使用?
您需要在调用 setiosflags
之前调用 resetiosflags
。这样做的原因是 setiosflags(ios::hex|ios::showbase|ios::uppercase)
只是将这些标志附加到流中,就好像调用 setf
一样,并且在流中给出了冲突的标志。使用
std::cout << std::resetiosflags(std::ios_base::dec)
<< std::setiosflags(std::ios::hex|std::ios::showbase|std::ios::uppercase)
<< a << endl;
将使其正确显示 a
。
第一个版本需要先清除std::ios::dec
,否则优先:
std::cout << resetiosflags (std::ios::dec);
您可以通过使用适当的掩码调用 setf
来一次完成此操作,例如:
std.cout.setf (std:ios.hex, std.ios.basefield);
如 cppreference 中所述,std::cout << hex
会为您完成此操作。
int a=60;
cout<<setiosflags(ios::hex|ios::showbase|ios::uppercase);
cout<<a<<endl;
上面的代码不起作用,但如果我使用
cout<<hex
然后
cout<<setiosflags(ios::showbase|ios::uppercase)
那么它正在工作
为什么?以及我怎么知道哪个可以在 setiosflags() 中使用?
您需要在调用 setiosflags
之前调用 resetiosflags
。这样做的原因是 setiosflags(ios::hex|ios::showbase|ios::uppercase)
只是将这些标志附加到流中,就好像调用 setf
一样,并且在流中给出了冲突的标志。使用
std::cout << std::resetiosflags(std::ios_base::dec)
<< std::setiosflags(std::ios::hex|std::ios::showbase|std::ios::uppercase)
<< a << endl;
将使其正确显示 a
。
第一个版本需要先清除std::ios::dec
,否则优先:
std::cout << resetiosflags (std::ios::dec);
您可以通过使用适当的掩码调用 setf
来一次完成此操作,例如:
std.cout.setf (std:ios.hex, std.ios.basefield);
如 cppreference 中所述,std::cout << hex
会为您完成此操作。