I/O: std::ios_base

std::ios_base做为所有stream最底层的类,主要提供 “与字符类型以及其相应之char_traits无关”的:

(1), state information

(2), control information

(3), private storage

(4), callbacks

构造函数:

public:
ios_base( const ios_base& ) = delete;


protected:
ios_base();

其中拷贝构造函数是被删除了的(=delete)

默认构造函数则是protected的这意味着我们只能在它的派生类中使用。

 

std::ios_base::flags

fmtflags flags() const;
 	
fmtflags flags( fmtflags flags );

不接受参数的flags()返回当前stream返回当前设置的flag(s).

接受参数的flags()给当前流设置flag(s),并返回设置之前的flag(s).

 

std::ios_base::setf

fmtflags setf( fmtflags flags );
	
fmtflags setf( fmtflags flags, fmtflags mask );

1,给当前stream增加额外的flag(s),返回设置之前的flag(s).

2,首先清除当前stream设置的mask, 然后设置flags到清除的位置.

fl = (fl & ~mask) | (flags & mask) ;//fl为std::ios_base private data member.

 

std::ios_base::unsetf

void unsetf( fmtflags flags );

从当前流清除掉指定的flags.

 

std::ios_base::width

streamsize width() const;

streamsize width( streamsize new_width );

不接受参数的版本返回当前输出栏的宽度

接受参数的版本设置输出栏的宽度为new_width,并返回之前的输出栏的宽度.

 

std::ios_base::precision

streamsize precision() const;

streamsize precision( streamsize new_precision );

返回流内输出浮点数时所用的精度

设置流内输出浮点数时的精度,并返回设置前的精度.

 

std::ios_base::imbue

std::locale imbue( const std::locale& loc );

给当前stream设置std::locale.

 

std::ios_base::getloc

std::locale getloc() const;
	

获得当前stream设置的std::locale.

 

std::ios_base::sync_width_stdio

static bool sync_with_stdio( bool sync = true );
	

默认情况下: std::cin, std::cout, std::cerr, std::clog以及他们对应的w_char版本是与标准C Stream同步的.

该函数其实可以拉出来作为一个专门的课题研究一下:

调用该函数的时候必须位于所有I/O操作之前.

由于C++兼容C,但是在C中也有I/O stream(stdin, stdout, stderr)而这些stream都有buffer的概念怎么办呢?

于是C++中就有了这个函数默认情况下(true)每次C++的I/O操作除了在自己的buffer内缓存一份外还要缓存一份到C stream的buffer内.因此常常该特性也会拖慢C++ stream的性能.

另外2点:

1,调用sync_with_stdio(true)的情况下是线程线程安全的保证不会产生data race.且保证了C/C++的I/O stream可以混用.

2,调用sync_with_stdio(false)的情况不会再缓存数据到C stream的buffer中,一般情况下都会有提速.最好不要C/C++的I/O stream混用了.

 

操纵符与flags(注意flags的类型为std::ios::fmtflgas):

 std::boolalpha 将true和false显示为字符串(其实具体的显示还是要看当前设置的std::locale, 相当于设置了std::ios::boolalpah)

std::noboolalpha 将要true和false输出为1和0(相当于设置了~std::ios::boolalpha)

std::showbase 对整型值输出显示进制前缀(相当于设置了std::ios::showbase)

std::noshowbase 取消对整型值输出显示进制前缀(相当于设置了~std::ios::showbase)

std::showpoint 对浮点数(float, double)总是显示小数点(相当于设置了std::ios::showpoint)

std::noshowpoint 当浮点数包含小数部分的时候才显示小数点(相当于设置了~std::ios::showpoint)

std::showpos 对非负数显示+(相当于设置了std::ios::showpos)

std::noshowpos 对非负数不显示+ (相当于设置了~std::ios::showpos)

std::uppercase 在十六进制值中打印0X,在科学记数法中打印E (相当于设置了std::ios::uppercase)

std::nouppercase 在十六进制值中打印0x,在科学计数法中打印e (相当于设置了std::ios::nouppercase)

std::dec 整型值显示为十进制 (相当于设置了std::ios::dec)

std::hex 整型值显示为十六进制 (相当于设置了std::ios::hex)

std::oct 整型值显示为八进制  (相当于设置了std::ios::oct)

std::left 在值的右侧添加填充字符 (相当于设置了std::ios::left)

std::right 在值的左侧添加填充字符 (相当于设置了std::ios::right)

std::internal 正负号靠左对齐,数值靠右对齐(相当于设置了std::ios::internal)

std::fixed 浮点数显示为定点十进制(相当于设置了std::ios::fixed)

std::scientific 浮点值显示为科学计数法(相当于设置了std::ios::scientific)

std::hexfloat 浮点值显示为十六位进制 (相当于设置了std::ios::hexfloat)

std::defaultfloat 重置浮点数格式为十进制(相当于设置了std::ios::defaultfloat)

std::unitbuf 每次输出操作都刷新缓冲区(相当于设置了std::ios::unitbuf)

std::nounitbuf 恢复正常的缓冲区刷新模式 (相当于设置了~std::ios::unitbuf)

std::skipws 输入运算符(operator >>)跳过空白符(相当于设置了std::ios::skipws)

std::noskipws 输入运算符(operator>>)不跳过空白符 (相当于设置了~std::ios::skipws)

std::flush 刷新输出流的缓冲区

std::ends 在输出流中插入'\o',并刷新缓冲区

std::endl 在输出流中插入'\n',并刷新缓冲区

std::setw(val) 令val为当前I/O栏的宽度.

std::setfill(c) 将c定义为填充字符.

std::setprecision(int) 设置小数精度.

std::setbase(int) 设置以哪种进制来输出流中的数字.

std::setiosflags(flags) 给指定stream设置flags其实是间接调用流的setf(flags)成员函数.

std::resetiosflags(mask) 清除指定stream所标示的一组flag其实间接调用该stream的setf(0, mask).

转载于:https://my.oschina.net/SHIHUAMarryMe/blog/745420

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值