由於編譯器必須能夠識別出字首自增與字尾自增,人為規定用 operator++() 和 operator–() 過載前置運算子,用 operator++(int) 和 operator–(int) 過載後置運算子,在這裡的 int 並沒有什麼實際的意義,僅僅是為了區分過載的是前置的形式還是後置的形式。
用空間換時間。
系統為了實現函式呼叫會做很多額外的幕後工作:儲存現場、對引數進行賦值、恢復現場等等。如果函式在程式內被多次呼叫,且其本身比較短小,可以很快執行完畢,那麼,在完成這個函式呼叫的時候,系統花在完成這些幕後工作上的時間將遠大於最核心的函式本身執行的時間,這就像好鋼用在了刀背上,將極大地減低程式的效能。
為了解決這個問題,c++提供了內聯函式的機制,通過將函式**內聯到函式呼叫的地方,避免函式呼叫過程中的那些幕後工作,從而提高這種短小的函式被重複多次呼叫的效能。
當編譯器編譯程式時,如果發現某段**呼叫的是乙個內聯函式,那麼它就不再去呼叫該函式,而是將該函式的**直接插入當前函式呼叫的位置,這樣就省去了函式呼叫過程中的那些繁瑣的幕後工作,提高了**的執行效率,這樣就以程式空間的增加換取了執行時間的減少。
儘管記憶體是以位元組為單位,但是大部分處理器並不是按位元組塊來訪問記憶體的。它一般會以雙位元組、四位元組、8位元組、16位元組甚至32位元組為單位來訪問記憶體。
每個特定平台上的編譯器都有自己的預設「對齊係數」(也叫對齊模數)。gcc中預設#pragma pack(4),可以通過預編譯命令#pragma pack(n),n = 1,2,4,8,16來改變這一係數。
有效對其值:是給定值#pragma pack(n)和結構體中最長資料型別長度中較小的那個。有效對齊值也叫對齊單位。
了解了上面的概念後,我們現在可以來看看記憶體對齊需要遵循的規則:
(1) 結構體第乙個成員的偏移量(offset)為0,以後每個成員相對於結構體首位址的 offset 都是該成員大小與有效對齊值中較小那個的整數倍,如有需要編譯器會在成員之間加上填充位元組。
(2)結構體的總大小為有效對齊值的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。
類的友元函式是定義在類外部,但有權訪問類的所有私有(private)成員和保護(protected)成員。儘管友元函式的原型有在類的定義**現過,但是友元函式並不是成員函式。
友元函式不能是虛函式。c++不支援友元函式的繼承,對於沒有繼承特性的函式沒有虛函式的說法。友元函式不屬於類的成員函式,不能被繼承。
建立物件時,首先呼叫基類的建構函式,然後在呼叫下乙個派生類的建構函式,依次類推;
析構物件時,其順序正好與構造相反;
不同的執行緒對同乙個資料進行操作的時候,常常會產生預期之外的結果。
當多個執行緒訪問某個方法時,不管你通過怎樣的呼叫方式、或者說這些執行緒如何交替地執行,我們在主程式中不需要去做任何的同步,這個類的結果行為都是我們設想的正確行為,那麼我們就可以說這個類是執行緒安全的。
如果有多個執行緒要對某乙個資料操作,則需要採取一些措施,讓共享的資料同時只能有乙個執行緒對其進行操作。
5個步驟,教你瞬間明白執行緒和執行緒安全_csdn資訊-csdn部落格
C語言輸出(主要是printf函式)
在c語言中,有三個函式可以用來在顯示器上輸出資料,它們分別是 puts 只能輸出字串,並且輸出結束後自動換行。putchar 只能輸出單個字元。printf 可以輸出各種型別的資料。printf 是其中最靈活 最複雜 最常用的輸出函式,它通過格式控制符對輸出進行格式控制,它的部分格式控制符如下 pr...
C 複習筆記(五)主要是模板部分
1.函式模板 template void myswap t a,t b 函式模板呼叫 void main 函式模板作為函式引數 templateint mysort t1 array,t2 size void main int size sizeof myarray sizeof myarray m...
linux下c 開發主要是做什麼?
一 linux下的c c 程式設計 入門級知識 1 linux安裝 首先安裝linux作業系統,一般初學者還是在vm上安裝linux學習比較好,作業系統選擇ubuntu或者redhat比較合適 用的人多o o vm的安裝比較簡單,在此不多說。vm安裝之後,建立workstation,注意分配好記憶體...