C++标准输出流对象
程序设计过程中,不可避免地要进行输入与输出操作。前面章节列举的示例程序中,我们通常都会引入
本节,我们就来了解一下标准输出流的三个对象:cout、cerr 和 clog。所谓标准输出,其实就是向标准输出设备进行输出。通常来讲,我们可以将标准输出设备理解为显示器。
系统声明的三个标准输出流对象 cout、cerr 和 clog 中,cerr 和 clog 对象都是标准错误流,不同的是,cerr 是直接将错误信息输出到显示器,而 clog 是将错误信息先写入到缓冲区,待清扫缓冲区时,再将错误内容输出到显示器中。与 cerr 和 clog 对象不同,cout 对象则非错误流,而只是普通的输出流,该对象在进行输出时,也会经过先缓冲区,然后再输出到显示器。
举个例子:
在本例中,我们将程序中的所有 cerr 全都替换为 clog,或者将所有 clog 全都替换为 cerr,程序的输出结果是不会变化的,从这点看这两者似乎是没什么差别,其实差别在是否经过缓冲区,不过本例是无法体现出差别的,因为在输出异常信息的同时,endl 会带来一次清扫缓冲区动作,因此经不经过缓冲区是无法得以体现的。cerr 和 clog 之间的细微差别,我们只要做到心中有数就可以了。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
<iostream>头文件,因为该头文件系统声明了输入输出类的对象,包含了该头文件后,我们就可以直接使用这些对象。这些对象中包含标准的输出流对象 cout、cerr 和 clog 以及标准输入流对象 cin 等。本节,我们就来了解一下标准输出流的三个对象:cout、cerr 和 clog。所谓标准输出,其实就是向标准输出设备进行输出。通常来讲,我们可以将标准输出设备理解为显示器。
系统声明的三个标准输出流对象 cout、cerr 和 clog 中,cerr 和 clog 对象都是标准错误流,不同的是,cerr 是直接将错误信息输出到显示器,而 clog 是将错误信息先写入到缓冲区,待清扫缓冲区时,再将错误内容输出到显示器中。与 cerr 和 clog 对象不同,cout 对象则非错误流,而只是普通的输出流,该对象在进行输出时,也会经过先缓冲区,然后再输出到显示器。
举个例子:
#include<iostream>
using namespace std;
enum index { underflow, overflow };
int array_index ( int *A, int n, int index );
int main()
{
int *A = new int [ 10 ];
for ( int i = 0; i < 10; i ++ )
A[i] = i;
try
{
cout << array_index( A,10,5 ) << endl;
}
catch( index e )
{
if( e == underflow )
{
cerr << "index underflow!" << endl;
}
if( e == overflow )
{
cerr << "index overflow!" << endl;
}
}
//index underflow test!
try
{
cout << array_index( A,10,-1 ) << endl;
}
catch( index e )
{
if( e == underflow )
{
cerr << "index underflow!" << endl;
}
if( e == overflow )
{
cerr << "index overflow!" << endl;
}
}
// index overflow test!
try
{
cout << array_index( A,10,15 ) << endl;
}
catch( index e )
{
if( e == underflow )
{
clog << "index underflow!" << endl;
}
if( e == overflow )
{
clog << "index overflow!" << endl;
}
}
return 0;
}
int array_index( int *A, int n, int index )
{
if ( index < 0 ) throw underflow;
if ( index > n-1 ) throw overflow;
return A[index];
}
在该程序中,我们同时使用了 cout、cerr 和 clog 对象。cout 对象我们早已经不陌生,cerr 和 clog 用于错误信息输出,它们的使用方式和 cout 是一样的。在本例中,我们将其用于输出异常信息。当访问数组出现下标越界时,程序就抛出异常,然后会被 catch 程序块捕获并在程序块中输出异常信息。在本例中,我们将程序中的所有 cerr 全都替换为 clog,或者将所有 clog 全都替换为 cerr,程序的输出结果是不会变化的,从这点看这两者似乎是没什么差别,其实差别在是否经过缓冲区,不过本例是无法体现出差别的,因为在输出异常信息的同时,endl 会带来一次清扫缓冲区动作,因此经不经过缓冲区是无法得以体现的。cerr 和 clog 之间的细微差别,我们只要做到心中有数就可以了。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。