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
noncopyable標頭檔:
Time of Update: 2018-12-03
windows平台上編譯64位程式變數類型大小變化:類型 用32位編譯的大小 用64位編譯的大小char 1 1short 2 2int 4 4long 4
Time of Update: 2018-12-03
初學時最好從命令列入手,這樣可以熟悉從編寫程式、編譯、調試和執行的整個過程。編寫程式可以用vi/vim(個人覺得vim比vi好用)或其它編輯器編寫。 編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。 gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。一. 常用編譯命令選項假設來源程式檔案名稱為test.c。1. 無選項編譯連結用法:#gcc
Time of Update: 2018-12-03
這幾天Scott Meyers在artima上發起了C++書籍的大討論,他給我們列了他認為最牛的五本經典書籍,依次是:The C++ Programming Language by Bjarne Stroustrup, Addison-Wesley, 1986 (1st edition), 1991 (2nd edition), 1997 (3rd edition), 2000 (special edition).Effective C++ by Scott Meyers,
Time of Update: 2018-12-03
#include<Windows.h>#include <iostream>#include <assert.h>using namespace std; void main(){ int va = 3032%1000; va = 3032/1000; int //a&b 與運算,會返回a和b中,每個位(位元,即二進位)最小的值; value = 1&1; //1 value = 1&0; //0 value =
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
本文是專門針對C++新特性的見解,融合自己學習使用過程中的各種曲折。當然,如果你是反C++聯盟或者各種逆反黨人士均可以跳過 。其中,肯定有許多不恰當的地方,有很多偏見,但還望各位看官秉持該打就打,該噴就噴的原則,看不慣就就拍吧!首先,我力圖以一種分類形式展現,把語言特性、庫和各種最佳實務、Idiom方法介紹給大家。這裡是關於C++11的一個資源清單,如果大家英文好,可以盡情閱讀。正如Stroustrup 的觀點:C++11 是一門新的語言——一個更好的
Time of Update: 2018-12-03
玩過lua的朋友肯定知道,C++要匯出介面道lua裡其實挺費事兒的,需要考慮lua調用C++後,棧如何彈出相應類型的參數,如何把C++的傳回值壓入lua棧。最麻煩,不省心且容易出錯的就是匯出一個介面就需要寫一堆破代碼。lua++?luabind?好吧,就當你們沒用過!看看下面的介面,也就是你需要寫的代碼,如果覺得還行,下載下來一起討論吧,你覺得呢? 這是註冊時用的,state是luaopen出來的,“test1”調用的函數名,第三個bind是C++處理的回呼函數,第四個,嗯,暫時挺醜陋,為了推匯
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
Chapter 5. 實現作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/在很大程度上,為你的 classes(和 class templates(類模板))提供適當的定義以及為你的 functions(函數)(和 function
Time of Update: 2018-12-03
Item 51: 編寫 new 和 delete 時要遵守慣例作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/Item 50 講解了什麼時候你可能需要編寫 operator new 和 operator delete 的你自己的版本,但是沒有講解當你這樣做時必須遵循的慣例。這些規則並不難以遵循,但有一些不那麼直觀,所以瞭解它們是什麼非常重要。我們從 operator
Time of Update: 2018-12-03
接下來是第六章的一道習題,要求實現一個binary_tree_inserter,以使用mpl::copy演算法從其它序列產生一棵二分尋找樹(Binary Search Tree,即滿足以下條件的一種二分樹:左子樹所有元素小於根,右子樹所有元素大於根,且左右子樹全都是二分尋找樹)。習題中給出的測試代碼如下:typedef mpl::copy< mpl::vector_c<int,17,25,10,2,11> , binary_tree_inserter<
Time of Update: 2018-12-03
Library 12. SignalsSignals 庫如何改進你的程式?Signals 如何適用於標準庫?Signals用法Signals 總結章節附註 Signals 庫如何改進你的程式?函數和函數對象的靈活多點回調健壯的觸發器及事件處理的機制相容於函數對象工廠,如 Boost.Bind 和 Boost.LambdaBoost.Signals
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
Item 52: 如果編寫了 placement new,就要編寫 placement delete作者:Scott Meyers譯者:fatalerror99 (iTePub's Nirvana)發布:http://blog.csdn.net/fatalerror99/在 C++ 動物園中,placement new 和 placement delete 並不是最常遇到的野獸,所以如果你和它們不熟也不必擔心。作為替代,回想一下 Items 16 和 17,當你寫下一個這樣的 new
Time of Update: 2018-12-03
《C++ Template Metaprogramming》的第三章舉了兩個例子,一個是量綱分析,另一個是進階元函數twice。量綱分析的實現比較清楚,對我來說是大開了一回眼界;但是對於進階元函數twice的實現,我覺得弄得有點太複雜了。先看看twice的定義:twice(f, x) := f(f(x)),要求提供一個twice的實現,然後從boost::add_pointer出發,得到add_two_pointers。書中給出的twice<F,
Time of Update: 2018-12-03
《C++ Template Metaprogramming》的第四章提到了緩式評估(lazy evaluation)和短路行為(short-circuit behavior)兩個概念,我編寫了一個測試這兩種行為的程式,但無法通過編譯,還以為是編譯器的問題,後來經過仔細思考,才發現是自己弄錯了。我最初的理解是,緩式評估(lazy evaluation)就是if_<>在看到第一個參數為true時,就不會去碰第三個參數;同樣,短路行為(short-circuit
Time of Update: 2018-12-03
shared_ptr標頭檔:
Time of Update: 2018-12-03
這兩周學習了《C++ TMP》第五、六章,是關於TMP的序列(容器)、迭代器和演算法。做了不少習題,其中最有意思的(也是花了我最多時間的)習題是用TMP實現二分尋找樹(Binary Search Tree)。從第五章的一道關於二分樹的習題開始。題目給出一個編譯期的二分樹資料結構,例如: typedef tree< // double double // / / ,