Time of Update: 2018-12-03
附錄 A. 超越 Effective C++作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/Effective C++ 覆蓋了我認為對當前的 C++ 程式員最重要的通用指導方針,但是如果你有興趣在更多的方面提升你的效力,我推薦你去研讀我的其他 C++ 書籍,More Effective C++ 和 Effective STL。More Effective C++
Time of Update: 2018-12-03
附錄 B. 第二和第三版之間的 Item 映射作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/Effective C++ 的第三版在很多方面與第二版不同,其中最令人信服的是它包含很多新的資訊。然而,第二版的大部分內容依然保留在第三版中,雖然經常會改變形式和位置。在後面幾頁的表格中,我展示了第二版 Items
Time of Update: 2018-12-03
TAOCP沒看多久,覺得裡面的數學知識太深了,離開學校多年,很多基礎知識已記不起來了,學起來有點累,所以結束了TAOCP的學習,轉到了《C++ Template Metaprogramming》。剛看完書中的第二章,關於 Type traits的,習題中有一條比較有趣,就是模仿cdecl命令將一個C++的類型用pseudo-English(偽英語)描述出來,例如:對於 char *(*[])() ,輸出“array of pointer to function returning
Time of Update: 2018-12-03
Item 4: 確保 objects(對象)在使用前被初始化作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/C++ 看上去在對象的值的初始化方面變化莫測。例如,如果你這樣做,int x;在某些情形下,x 會被初始化(為 0),但是在其它情形下,也可能沒有。如果你這樣做,class Point { int x, y;};...Point p;p 的 data
Time of Update: 2018-12-03
(點擊此處,接上篇)iterator_traits 通過兩部分實現這一點。首先,它強制要求任何 user-defined iterator(使用者定義迭代器)類型必須包含一個名為 iterator_category 的嵌套 typedef 用以識別適合的 tag struct(標籤結構體)。例如,deque 的 iterators(迭代器)是隨機訪問的,所以一個 deque iterators 的 class 看起來就像這樣:template < ... >
Time of Update: 2018-12-03
Item 24: 當希望將 type conversions(類型轉換)應用於所有 parameters(參數)時,請聲明為 non-member functions(非成員函數)作者:Scott Meyers 譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/在本書的 Introduction(導言)中我談到讓 classes 支援 implicit type
Time of Update: 2018-12-03
The Ten Commandments for C Programmers(Annotated Edition)by Henry Spencer1Thou shalt run lint frequently and study its pronouncements with care, for verily its perception and judgement oft exceed thine.This is still wise counsel, although many
Time of Update: 2018-12-03
上一篇我把建立單個線程的源碼給出來了,當然,線程池的也不能拉下~ 很多時候,我們需要一組線程來解決問題。當然可以建立一些線程來完成工作,然後關閉掉。當又需要時,重複上述過程即可。然而,無論是用戶端還是服務端,完全沒必要如此,只需要實現建立一組線程,按需分配,不必建立--關閉--建立--關閉… 也許我們也能自己寫成符合需求的線程池組件,但是,系統也提供了線程池組件。我認為就應該重複利用(出於學習的目的另當別論)。在這裡,主要針對XP系統,提供一組C++ wrap過的線程池組件和模仿ATL線程池。
Time of Update: 2018-12-03
Item 47: 為類型資訊使用 traits classes(特徵類)作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(演算法)的 templates(模板)構成的,但是也有幾個 utility templates(工具模板)。其中一個被稱為
Time of Update: 2018-12-03
內容轉自:http://blog.csdn.net/hbuxiaoshe/article/details/6558391原文內容如下:我用的是c++,所以我舉一個c++的例子,簡單說一下thrift的使用入門。例子描述是這樣的:我們將學生資訊(學號,姓名,性別,年齡)由用戶端發送到服務端。實現這個例子,我們大致要做以下幾部分事情:(1)書寫.thrift檔案(2)產生cpp檔案(3)編寫用戶端(4)編譯cpp檔案並執行 (1)書寫.thrift檔案學生資訊是有結構的,所以我們使用thrift的s
Time of Update: 2018-12-03
Item 39: 謹慎使用 private inheritance(私人繼承)作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/Item 32 論述了 C++ 將 public inheritance(公有繼承)視為一個 is-a 關係。當給定一個 hierarchy(繼承體系),其中有一個 class Student 從一個 class Person
Time of Update: 2018-12-03
scoped_array標頭檔: "boost/scoped_array.hpp"需要動態分配數組時,通常最好用std::vector來實現,但是有兩種情形,看起來用數組更應該: 一種是為了最佳化,用vector多少有一些額外的記憶體和速度開銷;另一種是為了某種原因,必須要求數組的大小是固定的。[5]
Time of Update: 2018-12-03
Item 50: 領會何時替換 new 和 delete 才有意義作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/讓我們先回顧一下基礎。為什麼有些人想要替換編譯器提供的 operator new 或 operator delete 版本呢?有三個最主要的原因:為了監測使用錯誤。對由 new 產生的記憶體沒有實行 delete 會導致記憶體流失。在 new
Time of Update: 2018-12-03
簡介最近在做一個crawler,為了更好的發揮抓取web的能力,需要用到非同步http。其中DNS解析、下載都需要非同步。 本組件基於WinHTTP實現,如果以後有需要再從頭構造輪子吧(基於iocp的非同步架構)。對於WinHTTP的思想,MSDN很多介紹,這裡,這裡說明該組件使用十分簡單,只需要完成幾種回調介面即可1. 完成HTTP HEADER2. 完成HTTP 整個內容3. 讀取HTTP本文4. 跳轉URL5. 錯誤處理針對WinHTTP的思想,抽象了幾個重要概念1.
Time of Update: 2018-12-03
再看一道簡單一些的習題:寫一個三個參數的元函數replace_type<c, x, y>,其中第一個參數c為任意的組合類別型,該元函數將c中出現的所有x類型以y類型替換掉。例如:typedef replace_type< void*, void, int >::type t1; // int* typedef replace_type<int const*[10], int const, long>::type t2; // long*
Time of Update: 2018-12-03
shared_ptr標頭檔:
Time of Update: 2018-12-03
調用(calling)機制從彙編時代起已經大量使用:準備一段現成的代碼,調用者可以隨時跳轉至此段代碼的起始地址,執行完後再返回跳轉時的後續地址。 CPU為此準備了現成的調用指令,調用時可以壓棧保護現場,調用結束後從堆棧中彈出現場地址,以便自動返回。借堆棧保護現場真是一項絕妙的發明,它使調用者和被調者可以互不相識,於是才有了後來的函數和構件,使吾輩編程者如此輕鬆愉快。若評選對人類影響最大之發明,在火與車輪之後,筆者當推壓棧調用。
Time of Update: 2018-12-03
轉自部落格:http://www.cnblogs.com/phinecos/archive/2008/03/08/1096691.html作者:洞庭散人“我現在項目是一個控制台程式,用到的Win32API都是與介面無關的,今天需要加入定時器重新整理的功能,由於沒有訊息迴圈,所以WM_TIMER訊息應該如何處理呢?綜合了下網上找到的資料,寫了個簡單的demo,個人以為這種在一個線程中建立定時器,再通過指定的回呼函數來處理定時器觸發的模式是比較好的。”demo: #include
Time of Update: 2018-12-03
今天在部落格園上看到一個部落格,是關於Winform分頁控制項使用詳細介紹 ,覺的這個控制項非常不錯,所以就把這封裝好的控制項down下來,試用一下,這就碰到問題了,那如何在工具箱中添加控制項呢?這是我經過 摸索尋找的一條路。首先在工具箱右鍵點擊 添加選項卡,然後添加一個分頁控制項的選項卡,如下:然後再分頁控制項的選項卡中右鍵點擊 選擇項,如下:點擊 瀏覽,選擇 你下載下來的分頁控制項的dll,就是WHC.Pager.WinControlEx.dll, 點擊確定,則點擊確定,即可看到
Time of Update: 2018-12-03
位元運算 位元運算的運算分量只能是整型或字元型資料,位元運算把運算對象看作是由二進位組成的位串資訊,按位完成指定的運算,得到位串資訊的結果。位元運算符有: &(按位與)、|(按位或)、^(按位異或)、~ (按位取反)。 其中,按位取反運算子是單目運算子,其餘均為雙目運算子。 位元運算符的優先順序從高到低,依次為~、&、^、|, 其中~的結合方向自右至左,且優先順序高於算術運算子,其餘運算子的結合方向都是自左至右,且優先順序低於關係運算子。 (1)