❥关于C++之std::ios_base::fmtflags/setf
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❥关于C++之std::ios_base::fmtflags/setf相关的知识,希望对你有一定的参考价值。
public member type
std::ios_base::fmtflags
输入流格式标志
流格式标志的类型表示流格式标志的位掩码类型。
此类型由成员函数flags
、setf
和unset
用作其参数和/或返回值。
这些函数传递和检索的值可以是以下成员常量的任何有效组合:
// using ios_base::fmtflags
#include <iostream>// std::cout, std::ios_base, std::ios, std::hex, std::showbase
int main ()
// using fmtflags as class member constants:
std::cout.setf (std::ios_base::hex , std::ios_base::basefield);
std::cout.setf (std::ios_base::showbase);
std::cout << 100 << '\\n';
// using fmtflags as inherited class member constants:
std::cout.setf (std::ios::hex , std::ios::basefield);
std::cout.setf (std::ios::showbase);
std::cout << 100 << '\\n';
// using fmtflags as object member constants:
std::cout.setf (std::cout.hex , std::cout.basefield);
std::cout.setf (std::cout.showbase);
std::cout << 100 << '\\n';
// using fmtflags as a type:
std::ios_base::fmtflags ff;
ff = std::cout.flags();
ff &= ~std::cout.basefield; // unset basefield bits
ff |= std::cout.hex; // set hex
ff |= std::cout.showbase; // set showbase
std::cout.flags(ff);
std::cout << 100 << '\\n';
// not using fmtflags, but using manipulators:
std::cout << std::hex << std::showbase << 100 << '\\n';
return 0;
0x64
0x64
0x64
0x64
0x64
代码显示了使用fmtflags成员常数及其同名操纵器打印相同结果的一些不同方式。
// skipws flag example
#include <iostream>// std::cout, std::skipws, std::noskipws
#include <sstream>// std::istringstream
int main ()
char a, b, c;
std::istringstream iss(" 123");
iss >> std::skipws >> a >> b >> c;
std::cout << a << b << c << '\\n';
iss.seekg(0);
iss >> std::noskipws >> a >> b >> c;
std::cout << a << b << c << '\\n';
return 0;
123
1
std::ios_base::setf
set (1) fmtflags setf(fmtflags fmtfl);
mask (2) fmtflags setf(fmtflags fmtfl, fmtflags mask);
设置特定的格式标志
第一种形式(1)设置流的格式标志,其位在fmtfl中设置,其余的保持不变,就像调用标志(fmtfl | flags())一样。
第二种形式(2)设置流的格式标志,其位在fmtfl和mask中都设置,并清除其位在mask中设置但不在fmtfl中的格式标志,就像调用标志((fmtfl&mask)|(flags()&~mask))。
两者都返回调用前流的格式标志值。
// modifying flags with setf/unsetf
#include <iostream>
int main ()
std::cout.setf(std::ios::hex, std::ios::basefield);// set hex as the basefield
std::cout.setf(std::ios::showbase);// activate showbase
std::cout << 100 << '\\n';
std::cout.unsetf(std::ios::showbase);// deactivate showbase
std::cout << 100 << '\\n';
return 0;
0x64
64
示例:
void file_it(ostream& os, double fo, const double fe[], int n)
ios_base::fmtflags initial;
initial = os.setf(ios_base::fixed, ios_base::floatfield); // save initial formatting state
std::streamsize sz = os.precision(0);
os << "Focal length of objective: " << fo << " mm\\n";
os.precision(1);
os.width(12);
os << "f.l. eyepiece";
os.width(15);
os << "magnification" << endl;
for (int i = 0; i < n; i++)
os.width(12);
os << fe[i];
os.width(15);
os << int(fo / fe[i] + 0.5) << endl;
os.setf(initial, ios_base::floatfield); // restore initial formatting state
os.precision(sz);
以上是关于❥关于C++之std::ios_base::fmtflags/setf的主要内容,如果未能解决你的问题,请参考以下文章