參考:http://www.weixueyuan.net/view/6408.html
總結:
iostream頭文件,包含了該頭文件后,我們就可以直接使用這些對象,包含標准的輸出流對象cout、cerr和clog以及標准輸入流對象cin等。
所謂標准輸出其實就是向標准輸出設備進行輸出,通常來講我們可以將標准輸出設備理解為顯示器。
系統聲明的三個標准輸出流對象cout、cerr和clog中,cerr和clog對象都是標准錯誤流,不同的是cerr是直接將錯誤信息輸出到顯示器,而clog則不同,clog是將錯誤信息先寫入到緩沖區,待清掃緩沖區時,再將錯誤內容輸出到顯示器中。
與cerr和clog對象不同,cout對象則非錯誤流,而只是普通的輸出流,該對象在進行輸出時,也會經過先緩沖區,然后再輸出到顯示器。
endl會帶來一次清掃緩沖區動作。
---------------------------
在程序設計過程中不可避免地要進行輸入與輸出操作,在前面章節列舉示例程序時我們通常都會
加上一個包含iostream頭文件,我們之所以包含該文件,那是因為在該頭文件中,系統聲明了輸入輸出類的對象,包含了該頭文件后,我們就可以直接使用這些對象了。這些對象中包含標准的輸出流對象
cout、cerr和clog以及標准輸入流對象cin等。我們這一節先來了解一下標准輸出流的三個對象:cout、cerr和clog。
所謂標准輸出其實就是向標准輸出設備進行輸出,通常來講我們可以將標准輸出設備理解為顯示器。 系統聲明的三個標准輸出流對象cout、cerr和clog中,cerr和clog對象都是標准錯誤流,不同的是cerr是直接將錯誤信息輸出到顯示器,而clog則不同,clog是將錯誤信息先寫入到緩沖區,待清掃緩沖區時,再將錯誤內容輸出到顯示器中。與cerr和clog對象不同,cout對象則非錯誤流,而只是普通的輸出流,該對象在進行輸出時,也會經過先緩沖區,然后再輸出到顯示器。
例1:
在該程序中我們同時使用到了cout、cerr和clog對象,cout對象我們早已經不陌生,在前面幾乎所有的例程中輸出都是用的它,cerr和clog用於錯誤信息輸出,它的使用方式其實和cout時一樣的,在本例中我們將其用於輸出異常信息。當訪問數組出現下標越界時,程序就拋出異常,然后會被catch程序塊捕獲並在程序塊中輸出異常信息。在本例中我們如果將程序中的所有cerr全都替換為clog或者將所有clog全都替換為cerr,程序的輸出結果是不會變化的,從這點看這兩者似乎是沒什么差別,其實差別在是否經過緩沖區,不過本例是無法體現出差別的,因為在輸出異常信息的同時,
endl會帶來一次清掃緩沖區動作,因此經不經過緩沖區是無法得以體現的。cerr和clog之間的細微差別,我們只要做到心中有數就可以了。
所謂標准輸出其實就是向標准輸出設備進行輸出,通常來講我們可以將標准輸出設備理解為顯示器。 系統聲明的三個標准輸出流對象cout、cerr和clog中,cerr和clog對象都是標准錯誤流,不同的是cerr是直接將錯誤信息輸出到顯示器,而clog則不同,clog是將錯誤信息先寫入到緩沖區,待清掃緩沖區時,再將錯誤內容輸出到顯示器中。與cerr和clog對象不同,cout對象則非錯誤流,而只是普通的輸出流,該對象在進行輸出時,也會經過先緩沖區,然后再輸出到顯示器。
例1:
#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]; }