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方法...