原创 C++ string實現原理

C++程序員編碼過程中經常會使用string(wstring)類,你是否思考過它的內部實現細節。比如這個類的迭代器是如何實現的?對象佔多少字節的內存空間?內部有沒有虛函數?內存是如何分配的?構造和析構的成本有多大?筆者綜合這兩天閱讀的源

原创 Boost源碼剖析之:泛型指針類any

C++是強類型語言,所有強類型語言對型別的要求都是苛刻的,型別一有不合編譯器就會抱怨說不能將某某型別轉換爲某某型別,當然如果在型別之間提供了轉換操作符或是標準所允許的一定程度的隱式轉換(如經過非explicit構造函數創建臨時變量的隱式轉

原创 C++臨時對象銷燬時間

下面這段代碼會輸出什麼? const char* p = string("hello temprary string").c_str(); cout << p;下面這段代碼運行之後會怎樣? #include <vector> cl

原创 關於 if(類對象) 語法的研究

class Object { }; int main(int argc, char *argv[]) { Object obj; if(obj){ //do something }else{ //do something

原创 objective-c中__bridge,__bridge_retained和__bridge_transfer區別

使用ARC 能幫我們減輕不少內存管理方面的負擔,但對於CFObject和NSObject轉換的問題,由於ARC不能管理Core Foundation Object的生命週期,所以在Core Foundation 和ARC 之間,我們需

原创 擴展C++ string類

在實際開發過程中,C++string類使用起來有很多不方便的地方,筆者根據根據這些不足簡單的擴展了這個類,如增加與數字之間的相互轉化和格式化字符串。不足的地方望指正。讀者也可以根據自己需求繼續擴展。 頭文件:exstring.h /*

原创 C/C++代碼優化的27個建議

本文由 伯樂在線 - 周昌鴻 翻譯自 cs.clemson.edu。歡迎加入技術翻譯小組。轉載請參見文章末尾處的要求。 1. 記住阿姆達爾定律: funccost是函數func運行時間百分比,funcspeedup是你優化函數的運行的

原创 C++ typeid實現原理

最近看了boost::any類源碼,其實現主要依賴typeid操作符。很好奇這樣實現的時間和空間開銷有多大,決定探一下究竟。 VS2008附帶的type_info類只有頭文件,沒有源文件,聲明如下: class type_info { p

原创 ASCII,UNICODE,UTF,GB2312,GBK詳解

一、概念 1,ASCII             ASCII(American Standard Code for Information Interchange),中文名稱爲美國信息交換標準代碼。是基於拉丁字母的一套電腦編碼系統。

原创 C++ dynamic_cast實現原理

dynamic_cast是一個操作符,其用法不再贅述。查看彙編碼可以發現實際調用的是這個函數__RTDynamicCast,其內部實現如下: rtti.h: #pragma once extern "C" { #include <win

原创 《Win32多線程程序設計》讀書筆記(二)(同步機制)

1,任何時候當一段代碼需要兩個或更多的資源時,都有潛在性的死鎖陰影。死鎖的情況非常複雜。例如下面一段代碼 void SwapLists(list* list1, list* list2) { list *tmp; EnterCrit

原创 《Win32多線程程序設計》讀書筆記(一)

1,可以使用GetExitThreadCode函數獲取線程函數結束時的返回值 2,多線程程序設計成功的關鍵: 2.1,各線程的數據要分離開來,避免使用全局變量 2.2,不要在線程之間共享GDI對象 2.3,確定你知道你的線程狀態。不要徑

原创 DirectUI實現原理

 一,概念  傳統的Windows窗口程序對每一個控件都會創建一個句柄,而DUI技術獎所有控件都繪製在一個窗體上,這些控件的邏輯和繪圖方式必須自己進行編寫和封裝,所以這些控件都是無句柄的。 DUI技術的實現步驟和難點: 1,窗口的子類化,

原创 Object-C的函數調用機制詳解--消息

本文系轉載,原文出處:http://blog.csdn.net/kesalin ps:Object-C和C,C++,java的函數調用機制還是有所區別的,其完全的runtime的調用方式是其實現消息機制的本質內容! 在入門級別的

原创 vs錯誤【C1083 C1854 C4727】的若干解決辦法

轉自:http://blog.csdn.net/you_lan_hai/article/details/6966038 這幾天寫程序,無意間把編譯中間文件給刪了,然後就出現了C1083編譯錯誤。 xxx.cpp ..\commen\