提防iostream使用中的乙個「陷阱」

2021-09-05 13:29:46 字數 569 閱讀 4390

先看下面的示例**:

template < typename t > void test()

}試著按下面這樣呼叫它:

test< int >();

一點問題都沒有。

再這樣呼叫:

test< char >();

你會發現當i=9的時候,assert在大聲地「抱怨」,這種情況下,我們受了stream「放進去什麼,拿出來也是什麼」的假相的迷惑,往stream放進去乙個(char)9,是拿不出來任何東西的!

或許你說,「好的,我知道了,stream對字元的處理和數值的處理不一樣」,我們再來看乙個例子:

test< byte >();

這種情況下,我們一樣的被byte迷惑了,byte是我們一廂情願定義的「數值」型別,實際上,只是乙個unsigned char而已,會被iostream當作char一樣處理。

注:上面的例子只在vc 7.1下、用ms版的stl測試過,別的版本的stl會如何處理char和byte,我自己沒有測試過,不敢下結論。

另外,我注意到boost::lexical_cast(v 1.31.0)也沒有對char和byte做特殊處理。

C 中的iostream格式控制

boolalpha 讓bool輸出時顯示true與false dec10進製顯示 endl 輸出new line字元 ends 輸出null字元 fixed 以正常的數字格式顯示 flush 清除串流 hex16進製顯示 left 靠左對齊 oct8進製顯示 right 靠右顯示 scientifi...

效能設計中的平衡 提防物極必反

這是乙個非常有意思且非常發人深省的案例。公司在做乙個元件的時候,一開始就以追求最高效率為目標。因此在制定方案的時候,採用了全部在記憶體中操作,從而獲取最佳效率。但是隨著應用中的資料量的提公升,效率在空間面前,越來越成為問題。這個案例有意思的地方就是,最初是為了追求最好的效率,最後反而沒有得到好的效率...

C 中的iostream輸入輸出

include include 是個包含命令,就是把iostream這個檔案裡的內容複製到這個地方。iostream是input output stream的簡寫,意思為標準的輸入輸出流標頭檔案。它包含 1 cin 要輸入的內容 2 cout 要輸出的內容 這兩個輸入輸出的方法需要 include來...