cin、cout、cerr、clog用法区别及其在VS环境下的重定向
今天学习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环境下的重定向
在调试程序时,经常会需要输入大量数据或者收集输出的数据信息,在这种情况下,可以采用重定向将输入输出流与特定文件联系起来,方便快捷,可以节省大量的时间精力,接下来演示如何在vs2012环境下实现四种io流的重定向。
对于cin的 重定向,首先应将需输入数据整理到目标文件,例如记为data.txt,然后将该文件放在解决方案的源码路径下,点击项目->属性,或者直接Alt+F7,打开对话框后找到左侧调试二级菜单,选择命令参数,键入"<data.txt"
之后点击确定,运行程序即可。对于cout的重定向,则是在命令参数中键入">target.txt",则会在源码路径下生成target.txt存放cout的输出。如果想要同时实现cerr及clog的重定向,则是需要在命令行中键入“>target.txt 2>&1”,则会在target.txt中同时存放cout、cerr和clog的输出信息。