【摘要】:动手写10.7.1动手写10.7.1展示了cerr和clog的使用。从图10.7.2中可以看到,只有cout的输出被重定向到了文件中,而clog和cerr属于标准错误流对象,显示的是错误信息,需要通过其他方式才能重定向到文件中去。此外,cerr、clog和cout也是有区别的,clog和cout的输出都需要先放入缓冲区,而cerr是直接跳过缓冲区输出的。在特殊的错误情况下,就算缓冲区来不及刷新,cerr也能顺利输出错误信息。
输出缓冲区
在我们调用cout输出数据的时候,数据并不是直接输出到屏幕的,而是需要先放到一个缓冲区中,这也是为了更好地管理计算机的输出资源。数据从缓冲区传送到真正的输出端,比如屏幕或者文件中,要在某些条件下才会发生,这也叫作缓冲区刷新。
一些标准I/O库的内置输出对象会造成缓冲区刷新,比如之前我们一直使用的endl,就会在添加换行符后刷新缓冲区,将一行的内容送到输出端。除此之外,ends会在添加空字符“\0”之后刷新缓冲区,而flush只有刷新缓冲区的功能。
之前我们多次使用cout将数据输出到屏幕,除此之外标准I/O库中还有两个标准错误流对象cerr和clog。
动手写10.7.1
动手写10.7.1展示了cerr和clog的使用。运行结果如图10.7.1所示:(www.xing528.com)
图10.7.1 cerr和clog
在这里我们并不能看出它们与cout的区别,但是如果在windows命令行运行程序并重定向标准输出,我们可以看到如图10.7.2所示的结果:
图10.7.2 标准输出重定向
命令行程序的默认输出端是命令行窗口的屏幕,而通过重定向操作符“>”可以改变命令行程序的输出端,将输出信息打印到文件或其他地方。从图10.7.2中可以看到,只有cout的输出被重定向到了文件中,而clog和cerr属于标准错误流对象,显示的是错误信息,需要通过其他方式才能重定向到文件中去。此外,cerr、clog和cout也是有区别的,clog和cout的输出都需要先放入缓冲区,而cerr是直接跳过缓冲区输出的。在特殊的错误情况下,就算缓冲区来不及刷新,cerr也能顺利输出错误信息。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。