今天学习C++,发现C++中的输出流除了常用的cout,还有cerr和clog两种输出流对象,由于之前没有遇到过,所以特地查了一下用法,记录一下。
1. cin、cout、cerr、clog的用法区别
经典教材《C++Primer》第五版中解释到:标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout的 ostream 类型对象,这个对象也称为标准输出。标准库还定义了另外两个ostream 对象,分别命名为 cerr 和 clog。cerr 对象又叫作标准错误,通常用来输出警告和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。一般情况下,系统将这些对象与执行程序的窗口联系起来。这样,当我们从cin 读入时,数据从执行程序的窗口读入,当写到 cin、cerr 或 clog 时,输出写至同一窗口。运行程序时,大部分操作系统都提供了重定向输入或输出流的方法。利用重定向可以将这些流与所选择的文件联系起来。
综合个人所查资料总结一下:
cin通过重载移位操作符>>实现数据流的输入;
cout、cerr、clog通重载移位操作符<<实现数据流输出,其中cout为标准输出流,在内存中开辟有缓存区,当缓存区满或者插入换行符endl时输出缓冲区中数据流到显示器;
cerr、clog均为标准错误流输出,不同的地方在于cerr输出不经过缓冲区,产生之后立即输出,故用于输出即时性的警告和错误消息,而clog则会首先输出到缓冲区,因此用于输出程序执行时产生的一般信息。
2. cin、cout、cerr、clog在VS2012环境下的重定向
在调试程序时,经常会需要输入大量数据或者收集输出的数据信息,在这种情况下,可以采用重定向将输入输出流与特定文件联系起来,方便快捷,可以节省