C 高階 十一 C 的冷知識

2021-10-19 11:43:53 字數 1769 閱讀 4882

templatauto gt(t1 x,t2 y)->decltype(x+y)
函式使用decltype修飾,其將根據實際傳入的引數型別生成準確的型別,例如:decltype(expression) var; 具體判斷邏輯如下:(1)如果expression沒有使用括號括起來,則型別與expression完全相同,例如 const int i =0; decltype(i) var;則var為const int.(2)如果expression是乙個函式呼叫,則var與函式返回值相同。注意,此時並不會呼叫函式,編譯器通過函式原型,獲取返回型別(3)如果expression是乙個左值且使用括號括起來,則var為其型別的引用。例如int i =0; decltype((i)) var;則var為int&,(4)以上情況都不滿足,則var與expression完全相同.例如 long i =0;decltype(i+6)var;此時var為long型別。 

2、定義在類宣告中的函式自動成為內聯函式,所以預設構造及預設析構函式都是內聯函式。

3、只有乙個引數的類建構函式允許使用該型別引數賦值語法對其進行構造,若要禁止這種隱式構造,可以使用explicit關鍵字修飾

#includeusing namespace std;

class banana

;

6、可將派生類物件賦值給基類或者使用派生類物件初始化基類物件,但內容只涉及基類部分。

#includeusing namespace std;

class fruit

fruit(fruit& f) ;

25、字串的字首u、u、l、r分別代表char16_t、char32_t、wchar_t以及原始字串

26、c++要求列舉變數只能用列舉值進行賦值

27、對乙個空指標進行delete或free操作將什麼也不做

28、陣列名是指標常量,是陣列首元素的位址,對陣列名取位址就是整個陣列

29、字首自加加比字尾自加加效率要高,因為字首直接返回其值加1的結果,而字尾則會先複製乙個副本,然後讓副本加1,再返回副本,顯然效率更低。

30、使用引用作為形參時,其實參型別必須與形參引用的型別一致,例如func(int& i),此時如果傳入long型別的變數將會報錯,且傳的必須為左值,如果該形參加上了const修飾,則沒關係。

31、如果函式使用const引用作為形參,而呼叫函式時,傳入的是常量或與形參const引用型別不匹配,c++將建立臨時匿名變數儲存該值

32、函式使用引用作為形參時,盡量使用const修飾,好處如下:(1)可以避免無意中修改資料的編譯錯誤(2)使用const引用可以使函式接受const和非const實參,否則只能接受非const (3)使用const引用使函式可以正確生成並使用臨時變數

33、型別引用和型別本身視為同一特徵標。const是否可以作為函式過載特徵標視情況而定   

34、函式模板:

注意:顯示例項化不包含 <>,可以通過函式使用建立顯示例項化:swap(j1,j2);

35、函式過載的呼叫順序:(1)建立候選函式列表,即函式名稱相同的所有函式,包括函式模板 (2)篩選出引數個數匹配的函式,包括預設引數(3)匹配最佳:完全匹配,a、常規函式優於模板 b、提公升轉換,即int->long  c、使用者自定義轉換

C 冷知識學習記錄

1.var弱化型別 只能區域性使用 var i 100 在定義時就初始化賦值,不能拆成兩行,之後i就只能賦整數型的數值 var j q 效率與int string等強型別相似,高於object,因為object要裝拆箱嘛2.家族 可空修飾符 int?i null 使i可以 null,一般值型別都不可...

C語言基礎冷知識彙總

和 的區別 表示按位取反,1變成0,0變成1。表示邏輯取反,false變ture,true變false,在c語言中,邏輯取反的物件只要不是0就表示為真。示例 5 0 5 二進位制00000101 取反11111010 6 表示按位取反,表示邏輯否定 所有的不是0的數用!操作後都是0 只有當運算元為0...

c語言常用到的幾個冷知識

c語言常用到的幾個冷知識 一,巨集定義中的特殊引數 和 va args 1,這個特殊的巨集定義引數也特別有用.作為乙個預處理運算子,它可以把語言符號字串化 stringizing 例如我們定義的變數等.簡單的說就是把定義值變成字串,常用於列印 define stringint x x int tes...