Time of Update: 2018-12-04
構造使用類C語言的指令碼引擎(2)作者 :kevin_qing轉貼請註明考慮到指令碼編譯器部分可以單獨作為一個進程實現,並且編譯器需要虛擬機器對其結果進行調試,目前先從最底層的虛擬機器部分開始開發。1.虛擬機器結構.考慮到目前不支援內建函式定義,採用寄存器方式,以後擴充棧也較為方便變數寄存器REG[256]
Time of Update: 2018-12-04
作者: winter 這裡描述的是一種很常見的情況:當你在某個緩衝中儲存資料時,常常需要在運行時調整該緩衝的大小,以便能容納更多的資料。傳統的記憶體再分配技術非常繁瑣,而且容易出錯:在 C 語言中,一般都是每次在需要擴充緩衝的時候調用 realloc()。在 C++ 中情況更糟,你甚至無法在函數中為 new
Time of Update: 2018-12-04
構造使用類C語言的指令碼引擎(3)作者 :kevin_qing轉貼請註明現在回到編譯器上的構造上。編譯分為4個步驟1.預先處理在這裡我只是替換掉源檔案的字元'/r'->'/n''/0'->0x20
Time of Update: 2018-12-04
多參數模板必須對所有參數才能偏特化,本文給出一種解決特化單個參數的方案例:使用loki中的多線程模板SingleThreaded<Host>單線程無需鎖ObjectLevelLockable<Host>多線程鎖單一執行個體ClassLevelLockable<Host>多線程鎖類現我希望使用編譯時間定義的const#ifdef _MTconst int MT=1;#elseconst int
Time of Update: 2018-12-04
貌似有些同學還不太明白這個,我試著用c代碼描述c++類相關的一些實現方式。 設類abc,bc繼承於a,都有個虛函數f(),解構函式為虛c++代碼//---------A struct a{ a(){ } void f(){printf("class a\n";}virtual ~a(){ } }; struct b:public a{ b(){}virtual void f(){printf("class b\n";}virtual ~b(){}};struct c:public a{ c(){
Time of Update: 2018-12-04
環境:win7+iis7+Office2007 在asp.net網站中匯出Excel檔案後,再把檔案匯入到資料庫中。 讀取Excel檔案時,開啟串連出錯。錯誤為:外部表格不是預期的格式解決:檢查了一下,匯出的Excel是標準檔案不是html,沒錯,Excel檔案正常。 調試代碼,建立連線物件oleDbConnection也正常,但在conn.Open()開啟連結時出錯。 仔細看了下連結字串,檢查出了錯誤,Excel版本問題,Exce連接字串版本是office2003的 ,更改為Excel20
Time of Update: 2018-12-04
Windows記憶體配置方式Win32的堆分配函數每一個進程都可以使用堆分配函數建立一個私人的堆──調用進程地址空間的一個或者多個頁面。DLL建立的私人堆必定在調用DLL的進程的地址空間內,只能被調用進程訪問。HeapCreate用來建立堆;HeapAlloc用來從堆中分配一定數量的空間,HeapAlloc分配的記憶體是不能移動的;HeapSize可以確定從堆中分配的空間的大小;HeapFree用來釋放從堆中分配的空間;HeapDestroy銷毀建立的堆。Windows傳統的全域或者局部記憶體配
Time of Update: 2018-12-04
大家都知道一個常識:“C++中千萬不要返回局部對象或變數的引用和指標”。既然所有C++權威的書上都要求“一定不要返回局部對象或變數的引用和指標”,那為什麼C++編譯器不從文法上直接禁掉這種用法。如果只是建議的話,那麼“返回局部對象或變數的引用和指標”是否有用武之地呢?(從理論上來講,我認為這種做法似乎總是錯誤的,原因大家都知道。)例1:class CComplex{public: CComplex():real(0),image(0){}
Time of Update: 2018-12-04
衍生類別與繼承保護成員可以被衍生類別的成員函數訪問,但是對於外界是隱藏起來的,外部函數不能訪問它。 建立衍生類別對象時,首先執行基類的建構函式,隨後再執行衍生類別的建構函式;當撤銷衍生類別對象時,則先執行衍生類別的解構函式,隨後再執行基類的解構函式。 當基類含有帶參數的建構函式,衍生類別必須定義建構函式。如果衍生類別的基類也是一個衍生類別,則每個衍生類別只需負責其直接基類的構造,依次上溯。 虛基類解決二義性。如果一個衍生類別是從多個基類派生出來的,而這些基類又有一個共同的基類,則在這個衍生類別中
Time of Update: 2018-12-04
關鍵字 mutable 是一個奇怪的修飾符(specifier),它只能夠用於一個類的非待用資料成員。下面我將討論 mutable 的語義和用法,但是首先我要解釋一下 C++ 物件模型的一個關鍵概念。對象的狀態 一個對象的狀態由其非待用資料成員的值構成,因此,修改一個資料成員將會改變整個對象的狀態。將一個成員函式宣告為 const 能夠保證它不會改變對象的狀態。
Time of Update: 2018-12-04
譚浩強C語言http://www.codeguru.cn/cpp/TanHaoQiangC 十部演算法經典著作 合集http://www.codeguru.cn/cpp/10book 二級試題全集http://www.codeguru.cn/cpp/2JiCShiTiJi 高品質C++/C編程指南http://www.codeguru.cn/cpp/AdvanceC++-CProgramGuide
Time of Update: 2018-12-04
1 常量 不變的值更易於理解、跟蹤和分析,所以應該儘可能地使用常量代替變數,定義值的時候,應該把const 作為預設的選項。 規則1.1 使用const常量取代宏 說明:宏是簡單的文本替換,在預先處理階段時完成,運行報錯時直接報相應的值;跟蹤調試時也是顯 示值,而不是宏名;宏沒有類型檢查,不安全;宏沒有範圍。 樣本: #define MAX_MSISDN_LEN (20) //不好的例子 const int MAX_MSISDN_LEN = 20; //好的例子 規則1.2
Time of Update: 2018-12-04
9 程式效率 9.1 C++語言特性的效能分級 影響軟體效能的因素眾多,包括軟體架構、運行平台(作業系統/編譯器/硬體平台)等。很多時候,程 序的效能在架構設計完成時就已經確定了。因此當一個程式的效能需要提高時,首先需要做的是用性 能偵查工具對其啟動並執行時間分布進行一個準確的測量,找出關鍵路徑和真正的瓶頸所在,然後針對瓶 頸進行分析和最佳化,而不是一味盲目地將效能低劣歸咎於所採用的語言。事實上,如果架構設計不做 修改,即使用C語言或者組合語言重新改寫,也並不能保證提高總體效能。
Time of Update: 2018-12-04
10並發 規則10.1 多線程、進程並行訪問共用資源時,一定要加鎖保護 說明:共用資源包括全域變數,靜態變數,共用記憶體,檔案等。 建議封裝像智能指標一樣的對象對鎖進行管理,比如我們就封裝了一個auto_lock,在構造時申請 鎖,析構中釋放鎖,保證不會忘記“解鎖”。如果鎖的作用範圍有限,則可以這樣: do { auto_lock lock(&lock); //.... }while(0); 規則10.2 鎖的職責單一
Time of Update: 2018-12-04
今天知道了<new>這個標頭檔,而且new還可以這樣:使用new不分配記憶體空間,只調用建構函式,如下代碼#include <iostream>#include <new>class CMyClass{public:CMyClass(){ std::cout << "here i am " << std::endl; }};int main(int, char**){CMyClass *c = new((void*)100)
Time of Update: 2018-12-04
指標是一個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的一個地址。 要搞清一個指標需要搞清指標的四方面的內容:指標的類型,指標所指向的 類型,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。讓我們分別說明。 先聲明幾個指標放著做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4];
Time of Update: 2018-12-04
shell指令碼(.sh):類似windows下的批處理bat.檔案比批處理強大,已經是一強大的程式設計語言了。echo "please enter your name:";read fname;echo ${fname} //{}可以省略預設資料類型為 字元類型env 查看環境變數echo $HOME 查看目前使用者目錄echo $PATH./執行;也可以修改vi /etc/profile增加 PATH=$PATH:.export PATH
Time of Update: 2018-12-04
C++標準庫的所有標頭檔都沒有副檔名。C++標準庫的內容總共在50個標準標頭檔中定義,其中18個提供了C庫的功能。 <cname>形式的標準標頭檔【 <complex>例外】其內容與ISO標準C包含的name.h標頭檔相同,但容納了C++擴充的功能。在 <cname>形式標準的標頭檔中,與宏相關的名稱在全域範圍中定義,其他名稱在std命名空間中聲明。在C++中還可以使用name.h形式的標準C庫標頭檔名。C++標準庫的內容分為10類:C1.語言支援
Time of Update: 2018-12-04
為什麼中國的程式員不敢對C++標準委員會說不?我在CSDN上發了一個貼子,指出C++標準委員會制定標準強制for迴圈一致性的做法是不合理的。其實關於強制for迴圈一致性的討論一直是比較激烈的,以前我在國外一些郵件清單中常常見到這樣的話題,兩方面的意見基本持平,不分高下。我在做我自己的太極語言時發現了一個規則,根據這個規則平滑推理過來可以判斷出不應強制for迴圈一致性,我就在我的blog和貼子裡說了。可是沒想到竟然……我覺到我們中國程式員界有一種不正確的思維定勢,過於迷信C++標準委員會(不只C+
Time of Update: 2018-12-04
.Net和Delphi都對Service進行了很好的封裝,但是用C++編寫Service還是一件很煩瑣的事情。先寫一些輔助類吧:// 管理Service的控制代碼class ServiceHandle {public: ServiceHandle(SC_HANDLE h) : h_(h) { if (!h_) throw SysError(); } ~ServiceHandle() { ::CloseServiceHandle(h_);