原创 深入new和delete小結

  new和delete是c++中使用頻率非常高的兩個關鍵字,可以說C++內存操作的核心就在於這兩個關鍵字,近幾天閱讀了相關的文章,發現自己對於這兩個關鍵字的理解太過膚淺,因此做了一些個人總結。   首先要明確一點,new和delete所

原创 C++中句柄類小結

句柄類,也就是handle class,是C++中的一種重要的面向對象方法,其作用有兩條:1. 減少頭文件的編譯依賴關係,讓文件間的編譯更加獨立;2. 增加系統安全性,把類的實現細節和聲明完全的分離開,讓類的實現細節對於用戶完全的不可見,

原创 Visual Studio 2010下生成ACE靜態庫方法

這幾天準備撿一撿C++網絡編程,自然少了不了最著名的C++網絡庫ACE了,上次用ACE還是本科時候,於是重新下載了ACE,是最新的6.05版本的,解壓後上文件夾裏找,居然沒找到帶static的工程文件,網上搜了好多方法,都是針對ACE 5

原创 The issue of template definition and declaration separation

The saparation between the declaration and the defination of template class is illegal. That is because the template cl

原创 關於winsock中異步通信的一個怪問題的解決。

昨天練習了一天異步式網絡通訊編程,在一個使用WSAAsyncSelect模式的程序中出現了問題,問題出現的很蹊蹺,客戶端可以和服務端連上,但就是觸發不了服務器的自定義事件,但是如果手動用SendMessage去觸發事件的話,一切正常,最初

原创 小細節:有關數組的指針的一道題

今天看到一道題。 4. What is the output of this program? #include <iostream> using namespace std; int main

原创 老媽真是太瞭解我了

早上還在睡夢中的時候,老媽來了個電話,問我,我有沒有腦震盪,我當時就懵了,怎麼問這個?我媽說夢到我腦震盪了,我趕緊說我沒事,一切都好,不要擔心。 掛了電話後,想想,不知道是不是和我媽有點心靈感應,俺這幾天雖然沒腦震盪,但是做的事,想的一

原创 刨根問底:C++中寬字符類型(wchar_t)的編碼一定是Unicode?長度一定是16位?

問題的起因是和一個朋友討論不同編碼的轉換問題,說到了wchar_t的類型,朋友的看法是,wchar_t的編碼方式是utf-16,長度一定是16位的。我的看法不同,我認爲wchar_t的長度和編碼方式都是編譯器和平臺決定的,和語言沒任何關

原创 小細節:void指針一二三

void指針,又叫通用指針或者泛指針(generic pointer)。同普通的指針不同,void指針可以指向任何變量。 1. 普通的指針可以看成有兩層含義:存儲了對象的地址;存儲了對象的類型。 2. 之所以需要存儲對象的類型,出於兩

原创 一些隨感

這幾天突然生病了,晚上開電熱毯忘記關掉,結果出了一身汗,然後關電熱毯,由於太熱,被子沒怎麼蓋,第二天就開始流鼻涕,開始沒在意,結果開始發燒了,躺牀上暈暈乎乎的,突然回想起小時候感冒發燒的時候,都是老媽用酒擦後背和額頭退燒的,現在想想,自己

原创 小細節:關於C++各種變量的size問題。

C++中整形數據類型的範圍都定義在了limits.h中,具體場景中可以從這個文件獲取編譯器具體實現方式。 ISO並沒有規定大部分數據類型的長度,僅僅規定了sizeof(char)=1,但位長卻是CHAR_BIT定義的。 32位機器中,

原创 把握代碼的整體性

前幾天開會的時候Cici說我寫代碼的時候過於關注於具體功能細節,對整體的把握不夠到位,回家自己思考了下,確實有道理,拿到需求後總是想直接把功能完成,而對於模塊的前因後果以及對整體的影響總是考慮不到位,以至於後期維護成本增加。 想想自己很

原创 刨根問底:C++中未初始化全局變量爲什麼都會被編譯器自動置0

有這個疑問很久了,今天搜了一上午資料想知道爲什麼。我們都知道,C++ 11 ISO標準中,未初始化的全局變量會被置0,原文如下。 Variables with static storage duration (3.7.1) or th

原创 兩個小細節:短路求值和調試宏

短路求值,又叫惰性求值,是&&和||操作符的操作方式,從左到右,左邊如果可以確定整個表達式的值,右邊表達式就不會處理。 打開調試宏的前提是必須不能定義 NDEBUG宏(也就是所謂的release模式)。 __LINE__ __FILE_

原创 刨根問底:C++的移位操作

以前一直有個誤區,認爲負整數的右移位操作符不會改變變量值,但最近查閱文檔發現,其實這只是VC編譯器的行爲,而這種行爲並不是ISO文檔裏規定死的,因此,做個小結。 這部分內容在C99文檔的6.5.7能找到。 移位之前首先做的是整形提升。