Time of Update: 2018-12-03
4.1 保持較小的範圍。 保持較小的範圍有助於避免一些難以發現的錯誤。C++支援在for迴圈和if語句中直接聲明變數,如:for (int i=0; i<100;i++){}if (bool b = func() ) {}其中i和b的範圍從被聲明的點開始,直到 } 結束。 4.2 不要在一個範圍和它外圍的範圍裡採用同樣的名字。在一個範圍和它外圍的範圍裡採用同樣的名字會造成名字遮蔽,即外圍的名字被內部範圍的名字遮蔽,人們很容易沒有注意某個名字被遮蔽了,所以會造成一些隱形錯誤。 4.
Time of Update: 2018-12-03
3.1 不要像重新發明車輪那樣企圖做每件事,去使用庫。<<Effective STL>>包含了關於如何使用STL的很多寶貴建議。如Item 13解釋了為什麼vector和string優先於動態數組。Item 43解釋了演算法調用優先於手寫迴圈。還有關於關聯容器,函數對象,迭代器的用法和注意事項。用STL寫程式時可以作為參考。 3.2
Time of Update: 2018-12-03
C++線程鎖的封裝,主要提供lock,unlock,require等操作,需要注意的是線程重複擷取鎖的問題,設定了一個count的計數器,該計算機之所以不考慮++,--的原子操作的問題,是因為該計數器本身就在lock與unlock中,所以本身是安全執行緒的。另外mutable count是將count的變化操作防止在const方法中,保證方法語義。class TC_ThreadCond;/** * 線程互斥對象 */struct TC_ThreadMutex_Exception :
Time of Update: 2018-12-03
愈發緊迫的挑戰現今,單台機器擁有多個獨立的計算單元已經太常見了,這點在伺服器的處理器上表現尤為明顯,據 AMD 的一張 2012-2013 伺服器路線圖顯示,伺服器處理器的核心數將在 2013 年達到 20 顆之多。合理的利用 CPU 資源已是一個不得不考慮的問題。不少 C++ 程式員依然使用著多執行緒模式,但是對多線程的掌控並不是一件容易的事情,開發中容易出錯、難以調試。有些開發人員為了避免多線程帶來的複雜度而棄用多線程,有些開發人員則另投其他語言陣營,例如
Time of Update: 2018-12-03
//類型轉換面試題.cppchar foo(void){ unsigned int a=6; int b=-20; char c; (a+b>6)?(c=1):(c=0); return c;}//解析: unsigned int 類型的資料與int類型的資料相運算後,自動轉換為unsigned int 類型。//因此a+b的值不是-14,而是一個unsigned
Time of Update: 2018-12-03
C# 可以使用的 .Net 類庫之龐大,不得不感慨一下。對於讀取檔案這一部分,可以使用的方法很多,特將想到和看到的方法收集在此,用到時可以查一查,溫習一下。以文字檔為例,可以有多種方法。方法一:System.IO.File.ReadAllTextstring content = System.IO.File.ReadAllText(fn);方法二:Stream Stream stream = File.OpenRead(fn); int bytesToRead = 1
Time of Update: 2018-12-03
++i,在使用i之前,進行自加動作;i++,在使用i之後,進行自加動作。例如:(1)i=1,j=i++;//j=i++,即為j先引用了i的值,然後i完成++的動作 printf("%d,%d\n",i,j);//結果為i=2,j=1 (2)i=1,j=++i;//j=++i,即為i先完成++的動作,然後j再引用 printf("%d,%d\n",i,j);//結果為i=2,j=2
Time of Update: 2018-12-03
C++中MFC的訊息映射機制類似C#的事件驅動機制。對比如下: C++:函數原型,函數實現,用來關聯訊息和訊息響應函數的宏。 C#: 編寫處理函數(相當於C++的前兩個),註冊事件(相當於C++的最後一個)。 C++執行個體: //標頭檔CMFCTestView.h // Generated message map functions protected: //{{AFX_MSG(CMFCTestView)
Time of Update: 2018-12-03
總結一下 如 C1 * p = new C2(); delete p; 這樣的代碼 這裡,C1是C2的基類,C1可能是C2的爸爸,可能是爺爺,可能是爸爸的爺爺,可能是爺爺的爺爺………………………… 那麼首先,調用的建構函式是 從C2的第一個祖先一直到C2………………。和C1是什麼沒關係 在delete p的時候,那麼有以下幾種情況: 1) C1或者C1的祖先(基類)中,含有虛解構函式,那麼調用的解構函式的順序是從C2一直到C2的第一個祖先
Time of Update: 2018-12-03
C++ casts那些事兒 C/C++編譯器類型隱式轉換我想大家都一定很熟悉了。寫C++的程式,要麼是依靠編譯器進行類型隱式轉換,要麼自己顯示將類型進行轉換,但是很少用到cast。最近看到一些代碼經常使用cast來進行顯示轉換。自己研究下,發現cast這東西還是很有意思。 C++中cast關鍵字有:static_cast, dynamic_cast, const_cast, reinterpret_cast四種cast的文法: cast-name<type>(expressiong)
Time of Update: 2018-12-03
如果沒有自訂複製建構函式,則系統會建立預設的複製建構函式,但系統建立的預設複製建構函式只會執行“淺拷貝”,即將被拷貝對象的資料成員的值一一賦值給新建立的對象,若該類的資料成員中有指標成員,則會使得新的對象的指標所指向的地址與被拷貝對象的指標所指向的地址相同,delete該指標時則會導致兩次重複delete而出錯。下面是樣本://animal.h#include<string>#include<iostream>using namespace std;class
Time of Update: 2018-12-03
今天閑來無事,晒晒自己最近從項目中學的東西吧。重點是感受啊,這些東西以前也接觸過,但是不會活學活用,導致需要的時候忘的差不多了。 1)Eval綁定可以綁定一個單獨的欄位 Eval("houseID")也可以綁定一個函數 <%# houseEdit(Eval("infoType"), Eval("houseID"))%> 2)Bind綁定 兩者的區別:Eval 方法是靜態單向(唯讀)方法,所以Eval
Time of Update: 2018-12-03
C語言編譯全過程 編譯的概念:編譯器讀取來源程式(字元流),對之進行詞法和文法的分析,將進階語言指令轉換為功能等效的彙編代碼,再由組譯工具轉換為機器語言,並且按照作業系統對可執行檔格式的要求連結產生可執行程式。 編譯的完整過程:C來源程式-->先行編譯處理(.c)-->編譯、最佳化程式(.s、.asm)-->組譯工具(.obj、.o、.a、.ko)-->連結程式(.exe、.elf、.axf等)1. 編譯預先處理
Time of Update: 2018-12-03
/// <summary> /// 返回絕對URL地址 /// </summary> /// <param name="fromUrl">來源URL</param> /// <param name="url">搜尋到的地址</param> /// <returns>絕對URL地址</returns>
Time of Update: 2018-12-03
父視窗:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace mail...{ public partial class Form1: Form ...{ private
Time of Update: 2018-12-03
Hello World1.建立一個WinForm項目,項目->增加新項->選擇Crystal 報表2.使用報表精靈->建立新串連->資料庫檔案->選擇一個Access資料庫db.mdb3.選中一個表:Article添加到選定的表中,下一步4.選擇可用欄位添加到要顯示的欄位中。不點下一步,直接點完成。5.這樣就建立了一個報表檔案,為報表做一些美化。
Time of Update: 2018-12-03
雖然Revit的使用者和開發目前在中國都很少,但是這是個趨勢。未來Revit會在許多方面取代Autocad做CAD二次開發的,在中國也很吃香。但是使用C++難倒了許多人。而Revit二次開發可以使用C#並且上手非常容易。假如你是一個C#程式員,正在確定自己未來的方向,不妨考慮做個Revit二次開發人員。這是我剛剛建立的Revit二次開發論壇http://revit.5d6d.com目前國內還沒有成熟的Revit二次開發產品,我們共同努力吧。
Time of Update: 2018-12-03
這個問題應該是我以前在CSDN蹭分時回答次數比較多的一個問題了,我的回答一般是三種方法:(1)用vector的vector,(2)先分配一個指標 數組,然後讓裡面每一個指標再指向一個數組,這個做法的好處是訪問數組元素時比較直觀,可以用a[x][y]這樣的寫法,缺點是它相當於C#中的一個鋸齒 數組,記憶體空間不連續。(3)直接分配一個x*y大小的一維數組,這樣保證空間是連續的,但訪問數組元素不直觀。對於我這個“經典”回答,我那時還一直是 挺得意的,至少從蹭分的角度來看,這樣回答還是很有效。
Time of Update: 2018-12-03
最近一段時間總是用C和WEBSERVICE進行一些資料的互動,所以不得不用XML這些東西,用C寫死剖析器總是不太好,稍做更改就是改程式,太麻煩。 所以,在用這些之前,自已寫了點XML的解析小測試,感覺不是很難,拿出來和大家分享,如果您是高手,請不要見笑,如果您從中學到了點東西,那我非常高興,不妥之處警請指正: #include <libxml/xmlreader.h>#include <stdio.h>#include <string.h>#include
Time of Update: 2018-12-03
在我的那篇“C++中虛解構函式的作用”中我說明了為什麼作為基類的類的解構函式必須是虛函數,同時也指出:為了避免產生虛函數表,如果類不是基類的話,解構函式就不需要聲明為虛函數。 但是,我們不能預料使用者的行為,你不敢肯定使用者是否會從你的類去派生自己的類。如果使用者以一個基類指標去刪除一個衍生類別的對象,就會發生衍生類別的解構函式不被調用的情況。這樣做的危險性我想大家都知道。當然,你可以在類的說明文檔中,甚至是在類的標頭檔中,說明你寫的類不能作為基類。可是,誰又能保證,使用者會仔細閱讀這些