C++基礎知識面試必備、複習細節 (9) {enum new union extern}
new和delete
- new表達式三步操作:
- new調用一個名爲operator new(或operator new[])的標準庫函數,該函數分配一塊足夠大的、原始的、未命名的內存空間以便存儲特定類型的對象(或者對象的數組)
- 編譯器運行相應的構造函數以構造這些對象,並傳入初值
- 對方被分配空間並構造完成後,返回一個指向該對象的指針
- delete表達式兩步操作:
- 對所指的對象或者所指的對象數組中的元素執行對應的析構函數
- 編譯器調用operator delete(或operator delete[])的標準庫函數釋放內存空間
枚舉類型enum
-
枚舉類型中的元素具有默認值,默認爲0,1,2…
-
枚舉元素按照常量處理,但不能對其賦常量值
-
enum <類型名> {<枚舉常量表>}; enum color {RED,YELLOW,GREEN}; color a=RED; //a被賦值爲RED enum weekday{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
-
使用enum主要是當某些變量具有固定的幾個可選值時,通過枚舉可以增強程序的可讀性,減少犯錯概率
聯合union
-
union是一種特殊的類,可以有多個數據成員,但是在任意時刻只有一個數據成員有值
-
因此union的存儲空間(即sizeof大小)是其最大的數據成員的存儲空間。所有變量的起始地址相同,因此當修改時等於是一個覆蓋。
-
union Token { char cval; int ival; double dval; }; Token first_token = {'a'}; Token second_token = {2}; if(first_token.cval=='a') cout << "true" << endl; //cout: true
c++不可移植性
-
volatile限定符:當對象的值可能在程序的控制或檢測以外被改變時,應該將對象聲明爲volatile,關鍵字volatile告訴編譯器不應該對作用的對象進行優化
-
extern “C” 鏈接指引:
-
extern "C"的主要作用就是爲了能夠正確實現C++代碼調用其他C語言代碼。加上extern "C"後,會指示編譯器這部分代碼按C語言(而不是C++)的方式進行編譯。由於C++支持函數重載,因此編譯器編譯函數的過程中會將函數的參數類型也加到編譯後的代碼中,而不僅僅是函數名
-
通常用於:C++代碼調用C語言代碼 或 在C++的頭文件中使用
-
被extern "C"修飾的變量和函數是按照C語言方式進行編譯和鏈接的
-
extern "C" size_t strlen(const char *); extern "C" { //some C code }; extern "C"{ #include<string.h> //c頭文件 }
-