C++标准输出流对象
程序設計過程中,不可避免地要進行輸入與輸出操作。前面章節列舉的示例程序中,我們通常都會引入頭文件,因為該頭文件系統聲明了輸入輸出類的對象,包含了該頭文件后,我們就可以直接使用這些對象。這些對象中包含標準的輸出流對象 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++标准输出流对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++基本序列式容器 vector (一
- 下一篇: C++输入输出类的层次