IO标准库:操作文件时应该注意的一些地方

本文详细介绍了C++ IO流库在操作文件时应注意的几点:流对象不支持复制或赋值,如何正确传递和返回IO对象;clear()函数的使用场景及其与setstate()的区别;文件模式的解释,包括in、out、trunc、app等模式的含义;缓冲区何时被刷新的情况解析;以及一个流对象操作多个文件的可能性。
摘要由CSDN通过智能技术生成


一、流对象不支持复制或者赋值操作

1、只有支持复制操作的元素类型可以存储在vector或其他容器中,由于流对象不能复制,因此不能存储在vector中,即不存在存储流对象的

vector 或其他容器;

2、形参或返回类型也不能为流类型。如果需要传递或返回 IO对象,则必须传递或返回指向该对象的指针或引用;

3、一般情况下,如果要传递 IO 对象以便对它进行读写,可用非 const 引用的方式传递这个流对象。对IO 对象的读写会改变它的状态,因此

引用必须是非const 的。


二、关于clear()函数的使用

1、clear函数的默认实参是goodbit,意思是设置流的状态位为goodbit,同理strm.clear(std::failbit)是将流的状态位设置为failbit;

2、strm.clear()通常与strm.sync()搭配使用,sync方法的作用是清除输入流的缓冲区,如下面的例子,当输入流要求输入的是整形,而用户

却输入非整形的字符,这会导致流的状态位为failbit,调用strm.clear()后将流的状态位设置为goodbit,但是用户输入的内容仍在cin的缓冲区

中,即下次再调用cin >> ival时,返回给ival的依然是存在缓冲区中非法的值,此时cin >> ival 不再生效,而是直接跳过要求用户输入的这个工

作,阻止这个程序行为就是清空cin的缓冲区cin.sync()。

void test_clear_sync(){
	int ival;
	while(std::cin >> ival, !std::cin.eof() ){
		if( std::cin.bad() ){
			throw std::runtime_error("Input stream is error!");
		}
		if( std::cin.fail() ){
			std::cout << "Please enter a number type!" << std::endl;
			std::cin.clear();
			std::cin.sync();
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值