Time of Update: 2018-12-04
下面是用來輸出變數信息的宏:#define typeof(typevar) / do { / string tmp; / cerr << "type of "#typevar" :"; / tmp = "c++filt -t "; / system((tmp + typeid(typevar).name()).c_str()); / } while(0);在這個宏定義裡面,do{}
Time of Update: 2018-12-04
C++中動態記憶體分配"new" 和 容器"vector"有什麼區別? 想要寫個需要動態分配記憶體的程式,不知道C++中動態記憶體分配"new" 和 容器"vector"有什麼區別? 請大家指教! ================================================ 呵呵!這個問題在其它地方提出來之後,受到不少的嘲笑。都說 vector
Time of Update: 2018-12-04
#的功能是將其後面的宏參數進行字串化操作(Stringfication),簡單說就是在對它所引用的宏變數通過替換後在其左右各加上一個雙引號。比如下面代碼中的宏:#define WARN_IF(EXP) do{ if (EXP) fprintf(stderr, "Warning: " #EXP ""); } while(0)WARN_IF (divider == 0);被替換為do { if (divider ==
Time of Update: 2018-12-04
偶爾看到 C Primer Plus 中講到變長數組(VLA),很有意思。 作者在他的 C Primer Plus 和 C++ Primer Plus 裡面都明確指出,定義數組時數組的元素個數必須是整型常量,不能是變數。但是在 C 這本書裡講到變長數組 VLA,在 C++ 那本裡面又沒有提。不知道為什嗎?想來一定是 VLA 用起來有些不太明確的地方。 我試著寫了個小程式測試,編譯運行都很正常。 #include <iostream> void vla(int length){int
Time of Update: 2018-12-04
1.第一個例子:假設:int var1 = 224; //存放var1的值224的記憶體位址是0x12ABCDEF則以下Code:int var2 = var1; // 將var1的值複製給var2.int& var2 = var1;//var2 是var1 的別名(var2是var1的引用),var1= var2 = 224,var1的值未發生複製,它們的值的地址都是0x12ABCDEFint var2 = &var1; //錯誤,
Time of Update: 2018-12-04
本文主要說明對象建立時建構函式的執行順序,對象成員的初始化順序;對象銷毀時解構函式的執行順序,對象成員的銷毀順序。 “對象的構造從類層次的最根處開始,在每一層中,首先調用基類的建構函式,然後調用成員對象的建構函式。析構則嚴格按照與構造相反的次序執行,該次序是唯一的,否則編譯器將無法自動執行析構過程。 一個有趣的現象是,成員對象初始化的次序完全不受它們在初始化表中次序的影響, 只由成員對象在類中聲明的次序決定。這是因為類的聲明是唯一的,而類的建構函式可以有多個,
Time of Update: 2018-12-04
建立和開啟FILE *fopen(const char *filename, const char *mode)//filename:開啟的檔案名稱(包含路徑,預設為當前路徑)//mode: 開啟模式常見開啟檔案r,rb 唯讀方式開啟w,wb唯寫方式開啟,如果檔案不存在,則建立該檔案a,ab追加方式開啟,如果檔案不存在,則建立該檔案r+, r+b, rb+ 讀寫方式開啟w+, w+b, wh+ 讀寫方式開啟,如果檔案不存在,則建立該檔案a+, a+b, ab+ 讀和追加方式開啟,如果檔案不存在,
Time of Update: 2018-12-04
1. 建立一個win32項目,選擇dll建立,如果是已經編寫好的類,則可以勾選”空項目”。2. 在“標頭檔”目錄下建立新的標頭檔,這裡以Node類為例:Node.h,將編寫好的Node的聲明寫入Node.h中。3. 注意,一般類的封裝此時就應當寫Node.cpp從而實現該類中的一些成員方法,但是由於Node類使用了模板(template),因此需要將實現和聲明寫在同一個檔案中,所以這裡我們不再建立Node.cpp檔案,而是直接將成員函數的實現寫在Node.h中。4.
Time of Update: 2018-12-04
<轉自“軟體工匠筆記”:http://linhs.blog.51cto.com/,特別表示感謝,希望更多被C++模板所折磨的人能看到這篇文章,寫得很清楚透徹> 一般發布C++類的方法是:使用.H檔案寫類定義,用CPP檔案寫實現。發布的時候可以把H檔案和CPP編譯出來的.O檔案給客戶程式,然後用戶端程式來編譯和連結類標頭檔和目標檔案。 雖然也發行就緒CPP源檔案,但發布.O檔案可以更好的維護類的相對獨立性,或者是原始碼實現不方便讓他人看到。 例如, 有類的標頭檔://Rec.
Time of Update: 2018-12-04
僅僅為了擷取函數名,就在函數體中嵌入硬式編碼字串,這種方法單調乏味還易導致錯誤,不如看一下怎樣使用新的C99特性,在程式運行時擷取函數名吧。 對象反射庫、調試工具及程式碼分析器,經常會需要在運行時訪問函數的名稱,直到不久前,唯一能完成此項任務並且可移植的方法,是手工在函數體內嵌入一個帶有該函數名的寫入程式碼字串,不必說,這種方法非常單調無奇,並且輕易導致錯誤。本文將要示範怎樣使用新的C99特性,在運行時擷取函數名。 那麼怎樣以編程的方式從當前啟動並執行函數中得到函數名呢? 答案是:使用_
Time of Update: 2018-12-04
Visual C++編程指南 http://msdn2.microsoft.com/zh-cn/library/ms173251(VS.80).aspx 英文版:Visual C++ Programming Guide http://msdn2.microsoft.com/zh-cn/library/ms173251(en-us,VS.80).aspx 本節包含關於 C++ 編程的概念性和基於任務的主題。本節內容 (1)使用 C++ 進行 .NET 編程 說明整個 C+
Time of Update: 2018-12-04
Visual C++編程指南 http://msdn2.microsoft.com/zh-cn/library/ms173251(VS.80).aspx 英文版:Visual C++ Programming Guide http://msdn2.microsoft.com/zh-cn/library/ms173251(en-us,VS.80).aspx本節包含關於 C++ 編程的概念性和基於任務的主題。本節內容(1)使用 C++ 進行 .NET 編程 說明整個 C++/CLI 文法中可用的
Time of Update: 2018-12-04
《C語言也能幹大事》的課程體系 很多同學對咱們C語言的課程、學習存在著很多誤解,而且很多同學還不知道《C語言也能幹大事》後 面的課程安排是什麼,因此這裡一併做一個說明。 有同學問“別人都說開發資料庫系統、Web系統還是Java、C#等最流行,咱們用C語言學了開發也不是 浪費嗎?”、“C語言不是做嵌入式開發、作業系統等底層的東西嗎?”、“我們為什麼不講C語言的 嵌入式開發?”、“人家都學Web開發,咱們這學C語言開發C/S的程式不是落伍了嗎?”。
Time of Update: 2018-12-04
今天讀了<<Windows 程式調試>>編寫便於調試的C++代碼這一章內容,覺得收穫較大,對本人在編程風格和編程習慣上有指導意義.筆記如下: 一.設計: 重要的特性是簡單性和耦合性, 大多數常見的設計錯誤來源於程式設計不必要的複雜成分,因此盡量使程式簡單合理.耦合性用來衡量不同對象之間的依賴程度,因此程式中能獨立的對象要盡量獨立出來. 二.C++編程風格1.清晰地書寫代碼,最直接的說出你的意思;2.結構良好的代碼具有更加有用的調用棧(call
Time of Update: 2018-12-04
信噪比( S N )是指傳輸訊號的平均功率與加性雜訊的平均功率之比。 載噪比(C N
Time of Update: 2018-12-04
晚上討論班回來,發現一些問題以前不清楚。具體來說:一:atexit註冊的多個函數會形成一個鏈表。當使用者調用exit後,被註冊過的函數按照註冊的反向順序依次執行。另外,被atexit註冊的函數除了類型必須為void (*)(void)外,就是一個普通的函數,在其中可以調用其它函數,例如在其中可以調用main函數,這一點應該會很有用,下面是自己寫的一個示範代碼:#include <stdio.h>#include <stdlib.h> int done; void fn1
Time of Update: 2018-12-04
有如下一段 C++ 範本元編程代碼,求類型鏈表中最長類型的長度。// 求列表中位元組最長的類型的位元組長度值// 使用鏈表傳遞的思想:1::2::3::4::[]#include <iostream>using namespace std;// 尾結點struct NullType;// 鏈表結點template <class T, class S> struct TypeList;// 定義四結點鏈表#define TypeList_1( T1 )
Time of Update: 2018-12-04
文 / 李博(光宇廣貞) 話說 1994 年,C++ 標準委員會在聖迭哥舉行的一次會議期間,Erwin Unruh 同學展示了一段可以產生質數的代碼。這段代碼的特別之處在於質數產生於編譯期而非運行期,在編譯器產生的一系列錯誤資訊中間夾雜著從 2 到某個設定值之間 的所有質數。其改進版據說在 GCC 3.2 上得到驗證。 原始碼這裡就不貼出來了,網上或者任一本《模板元編程(C++ Template Meta -
Time of Update: 2018-12-04
C++ 如何會有“虛建構函式”?而且還有傳回值?有時我們希望類建構函式能夠像其它普通成員函數一樣使用:帶傳回值,可覆蓋(override)。我們可以設計這樣一個 constructor 函數: 我們在 LB 類中定義了這樣一個“帶傳回值的虛建構函式”。在衍生類別中,我們可以覆蓋(override)它。現在我們可以讓這個“建構函式”像一個普通的成員函數一樣使用了(其實它就是一個普通的成員函數)。這裡有一點需要注意,C++
Time of Update: 2018-12-04
分離編譯模式(Separate Compilation Model)允許在一處翻譯單元(Translation Unit)中定義(define)函數、類型、類對象等,在另一處翻譯單元引用它們。編譯器(Compiler)處理完所有翻譯單元後,連結器(Linker)接下來處理所有指向 extern 符號的引用,從而產生單一可執行檔。該模式使得 C++ 代碼編寫得稱心而優雅。