語言基礎、數據結構與算法
所有基礎知識的學習和研究
徹底解密C++寬字符:6、國際化策略(完)
摘要: 硬編碼的硬傷——補救——Windows的策略——Linux的策略——跨平臺策略——gettext策略——更多
閱讀全文
posted @
2010-06-26 19:55 lf426 閱讀(3569) |
評論 (4) 編輯
徹底解密C++寬字符:5、利用fstream轉換
摘要: C++的流和本地化策略集——basic_filebuf——利用fstream實現寬窄轉換
閱讀全文
posted @
2010-06-26 16:40 lf426 閱讀(3110) |
評論 (0) 編輯
徹底解密C++寬字符:4、利用codecvt和use_facet轉換
摘要: locale和facet——codecvt——內部編碼和外部編碼——CodecvtFacet的in()和out()——演示程序源代碼——use_facet
閱讀全文
posted @
2010-06-26 13:39 lf426 閱讀(8795) |
評論 (2) 編輯
徹底解密C++寬字符:3、利用C運行時庫函數轉換
摘要: std::locale——mbstowcs()和wcstombs()——寬窄轉換函數:string和wstring之間的轉換。
閱讀全文
posted @
2010-06-26 11:17 lf426 閱讀(2982) |
評論 (1) 編輯
徹底解密C++寬字符:2、Unicode和UTF
摘要: Unicode和UCS——Unicode和UTF——UTF-8和Windows GB2312——UTF-16和UCS-2——UTF-32和UCS-4——BOM
閱讀全文
posted @
2010-06-25 21:51 lf426 閱讀(3616) |
評論 (1) 編輯
徹底解密C++寬字符:1、從char到wchar_t
摘要: 從字符到整數——本地化策略集(locale)——C/C++的編譯策略——寬字符 wchar_t
閱讀全文
posted @
2010-06-25 14:41 lf426 閱讀(21113) |
評論 (6) 編輯
迭代器(iterator)“擦”(erase)出的錯誤
摘要: 在我們遍歷查找對等值的循環中,一開始v.end()指向第10個元素(數值為9)的后面一個位置(不存在的第11個元素的位置)。當迭代器指向第10個元素(數值為9)的時候,v.erase()生效運行;下一輪循環中,迭代器本來應該指向第11個元素的位置,并且等于v.end()并結束循環。但是,因為我們擦掉了vector中的一個元素,v.end()指向的是現在的最后一個元素——第9個元素的后面,也就是第10個元素的位置。這樣,迭代器到了11,而判斷確是其是否到10,這將永遠無法實現,形成了一個邏輯bug,所以系統拋出錯誤了。
閱讀全文
posted @
2010-06-10 11:03 lf426 閱讀(1674) |
評論 (1) 編輯
用對象的成員函數引出線程,還是在線程中創建對象?
摘要: 所以,如果我們設想構造一個類,這個類的對象可以調用包含this的線程,那么這個對象一定不能是局部變量,或者說,我們必須在循環的{}對之前先把這些對象構造出來。或者說,如果我們希望用類來封裝線程,那么這些可以調用線程的對象必須是全局的。
閱讀全文
posted @
2010-06-05 21:06 lf426 閱讀(797) |
評論 (0) 編輯
在多線程中拋出的異常出錯?
摘要: 所以,一個解決方法是,凡是遇到新的線程,必須在新線程中重新寫異常處理。不然,就如google代碼標準里所說的那樣,不使用C++的異常機制。畢竟C++沒有定義多線程的標準,所以也就無從說起多線程中異常處理的標準。
閱讀全文
posted @
2010-06-05 20:16 lf426 閱讀(2646) |
評論 (2) 編輯
函數指針與成員函數指針
摘要: 因為他們通常調用的是函數指針,但是在C++中,我們通常把函數綁定到了與其數據相關的類中,也就是說,我們在C++中很少用到“單身”的函數,成員函數可以被那些調用函數指針的函數調用嗎?
閱讀全文
posted @
2008-04-26 12:39 lf426 閱讀(3979) |
評論 (0) 編輯
成員數據的三種形式與棧對象的生命周期
摘要: 結論是:如果成員數據使用(新)對象,則必須定義這個對象所屬類的復制構造函數;如果使用的是對象引用或者指針,則一定只能用已經存在并且會在B對象整個生命周期內都存在的A對象來構造這個B對象。
閱讀全文
posted @
2008-04-14 12:36 lf426 閱讀(523) |
評論 (0) 編輯
創建一次銷毀兩次?!復制構造函數的致命錯誤。
摘要: 所以,結論是,如果A類構造具有堆操作,有可能把A類作為B類的成員數據,B類又有可能通過成員初始化列表構造A對象,請一定別忘記手寫復制構造函數。
閱讀全文
posted @
2008-04-14 11:50 lf426 閱讀(537) |
評論 (0) 編輯
顯式析構函數的陷阱
摘要: 幾乎在大部分時候,我們是不需要顯式的調用析構函數的。顯式的調用析構函數是一件非常危險的事情,因為如果系統會調用析構函數,無論我們自己是否已經調用過,仍然會再次調用。換句話說,我們自己所謂的顯式調用析構函數,實際上只是調用了一個成員函數,并沒有真正意義上的讓對象“析構”。
閱讀全文
posted @
2008-04-12 14:29 lf426 閱讀(2492) |
評論 (1) 編輯
SDL入門教程(九):4、int轉換為std::string
摘要: 我下面考慮的問題,是用TextSurface反饋鼠標事件的信息。我想到的第一個例子,很自然就是反饋鼠標所在坐標的位置。這里涉及到一個基礎的問題,即鼠標位置顯然不是用字符串表示的。SDL給我們的反饋信息是int,我們需要用TextSurface將int構建成可以被blit到ScreenSurface上的面,需要做的第一件事情,是將int轉換為string。
閱讀全文
posted @
2008-03-26 20:48 lf426 閱讀(4278) |
評論 (8) 編輯
從“集合”實例分析修飾函數返回值的const作用
摘要: 發現這個問題,是因為一直以來思考的一個算法——關于“集合”的實現。這個集合就是數學中的集合,與計算機中數列一個最大的不同在于,集合的元素是互異的。因為這兩天在熟悉vector,所以覺得用vector實現集合再合適不過了。STL確實是很好很強大的體系,無論是內存管理,還是鏈表的實現,讓我們可以省很多心。其實關于為什么要實現集合,也是因為我在計劃實現類似英雄無敵戰場計算移動的一系列算法中,很多地方會用到集合的概念,甚至包括并集和差集等等。
閱讀全文
posted @
2008-03-13 13:30 lf426 閱讀(933) |
評論 (3) 編輯