C 基礎總結

2021-09-25 09:10:46 字數 1957 閱讀 9293

explicit

函式棧框架

decltype推導四準則

通用引用

型別轉換

系統呼叫

函式指標作用:

typedef const double* (p_fun)(const double d);//p_fun是一種typename,而不是函式指標

void (*fun(int (*arg)(void)))(void); // 返回值為void()函式指標,形參為int ()函式指標,函式名為fun

有3種方案來管理內部指標:

delete掉複製構造,複製拷貝

引用計數

底層複製,即複製內部指標指向的記憶體

share_ptr:採用方案二,引用計數,但是存在記憶體洩漏的風險(相互引用)

unique_ptr:採用方案一,用來替代auto_ptr

weak_ptr:用來處理share_ptr相互引用的記憶體洩漏問題,由share_ptr生成,但不會增加share_ptr計數,同時也不會管理物件生命

auto_ptr:被擯棄

新增inline識別符號,編譯器不一定會採用內聯,編譯器需要支援內聯,函式過大,遞迴函式與巨集定義不同,巨集定義通過文字替換實現,而內聯是引數傳遞

1、 隱式內聯,實現在類中

2、 顯示內聯,類裡宣告inline,類中或類外實現

3、 追加內聯,類中不宣告inline,類外宣告並實現inline

4、 非內聯,定義和申明都沒有inline

返回值型別確定:

1、返回指向const物件的引用

2、返回非const物件引用

常見引用目的提高效率,免去複製構造和析構,非const典型為cout,連續操作物件

3、返回物件

函式體內的臨時變數

4、返回const物件

示例:加法運算:

vector vector::operator+()

o1 + o2 = o3;//正確執行

應該修改為const vector vector:operator+();

o1 + o2 = o3;//會報錯

只有單個引數的構造方法,才會可能隱式轉換,explicit必須顯示呼叫,隱式轉換的可能:

1、 將class物件初始化為double值

2、 將double值賦值給class物件

3、 將double值傳遞給接受class物件引數的函式時

4、 返回值為class物件時,返回double值

5、 在上述任意一種情況下,使用可轉換為double型別的內建型別時

decltype推導四規則

如果e是乙個沒有帶括號的標記符表示式或者類成員訪問表示式,那麼的decltype(e)就是e所命名的實體的型別。此外,如果e是乙個被過載的函式,則會導致編譯錯誤。

否則 ,假設e的型別是t,如果e是乙個將亡值,那麼decltype(e)為t&&

否則,假設e的型別是t,如果e是乙個左值,那麼decltype(e)為t&。

否則,假設e的型別是t,則decltype(e)為t。

標記符指的是除去關鍵字、字面量等編譯器需要使用的標記之外的程式設計師自己定義的標記,而單個標記符對應的表示式即為標記符表示式。

通用引用只在型別推導時會出現:

函式模板引數(function template parameters)

auto宣告(auto declaration)

auto && var = …;

typedef宣告(typedef declaration)

decltype宣告(decltype declaration)

只有在通用應用中才會出現引用合成

static_cast 轉換失敗丟擲異常,向下轉換不會進行型別檢查

dynamic_cast支援交叉轉換,轉換失敗返回空指標,向下轉換會進行型別檢查判斷

頻繁呼叫系統核心函式會導致效能降低,因為程式進入核心態時,系統會將程式封裝儲存,在切入核心態,返回切換會導致效能降低

C 基礎總結

1.類的介面呼叫順序不能規定順序 即以任何順序呼叫都不應發生異常。2.當乙個類的物件超出其作用域時,編譯器即會呼叫其析構函式.cout end 在cout end 之前,會看到類test的析構函式的輸出.由彙編 也可看出test test 的呼叫.3.string string的c str 實際上返...

C 基礎總結

1 在字串前加乙個 字元,中特殊字元可以不用轉義 2 關鍵字checked和unchecked對表示式進行溢位檢查 3 foreach迴圈遍歷陣列 4 多維陣列宣告 矩形陣列,不同維度之間用逗號隔開 5 鋸齒陣列 jagged array 宣告如下 int jaggedintarray 初始化如下 ...

c 基礎總結

一 c 程式結構 命名空間 c 程式是利用命名空間組織起來的。如果要呼叫某個命名空間中的類或者方法,首先要使用using 指令來引入命名空間,using指令的基本形式為 using 命名空間 eg 類 類是一種資料結構,它可以封裝資料成員 函式成員和其他成員 類修飾符 class 類名 main方法...