基本型別(9種)
布林型(bool) 字元型(char) 寬字元型(wchar_t) 短整型(short) 整型(int) 長整型(long) 單精度浮點型(float) 雙精度浮點型(double) 長雙精度浮點型(long double)
布林型復合型別(7種)布林型(bool) - true/false
字元型 - 轉義字元
字元型(char) 'a'
寬字元型(wchar_t) l'a'
整型 - 四種表達方式(二進位制,八進位制,十進位制,十六進製制)
短整型(short)
整型(int) 1(預設為int)
長整型(long) 1l或者1l
浮點型 - 兩種表達方式(十進位制和科學計數法)
單精度浮點型(float) 1.1f或1.1f flt_epsilon
雙精度浮點型(double) 1.1(預設為double)
長雙精度浮點型(long double)
陣列 指標* 引用& 共用體(union) 結構體(struct) 列舉(enum) 類(class)
☞ 指標 - 與引用區別
☞ 引用 - 引用摺疊
非常量左值引用、常量左值引用、非常量右值引用、常量右值引用
以int為例:int&,const int&,int&&,const int&&
☞ 結構體 - 大小
遵循兩個原則+處理器架構+編譯器
兩個原則
1.結構體每個成員的偏移量是該成員最大對齊方式的整數倍,即offset(member)/align(member)=整數;
2.結構體總大小是該結構體最大對齊方式的整數倍,即sizeof(struct)/align(struct)=整數;
編譯器
/* 編譯器指定最大對齊方式為1 */
#pragma pack(push)
#pragma pack(1)
// 定義結構體
#pragma pack(pop)
自身對齊值:基本資料型別的變數就是其本身所佔位元組大小,復合型別的最大對齊值;
指定對齊值:由#pragma pack(value)指定的對齊值value;
有效對齊值:自身對齊值和指定對齊值中較小的值。
特殊型別
空void 別名typedef 別名using
數字、字母和下劃線組成,不能以數字開頭,大小寫敏感
static
extern 預設
mutable
const - 預設為static const,如需外部引用需顯式指定extern const
volatile - 易變性,不可優化性,順序性(保證編譯器語句順序,不能保證cpu順序執行)
unsigned(u/u)
型別指示符,提示編譯器對此型別的變數做型別的自動推導。
推導規則:
// 不宣告指標或者引用
int i0 = 1;
int& i1 = i0;
auto i2 = i1; // auto -> int (初始化表示式型別為int&,拋棄了引用後是int)
// 宣告指標或者引用
int i3 = 1;
const int& i4 = i3;
auto& i5 = i4; // i5 -> const int& (初始化表示式型別為const int&,保留const屬性)
推導限制
推導出表示式的型別,編譯期完成
推導規則:
普通陣列
pod(平凡和標準布局)
判斷:std::is_pod::value好處:
平凡 std::is_trivial::value平凡的預設建構函式和預設析構函式
平凡的預設拷貝建構函式和預設移動建構函式
平凡的預設拷貝賦值函式和預設移動賦值函式
無虛函式和虛基類
標準布局 std::is_standard_layout::value容器和std::initializer_list構造的類有待完善。。。
①用於類層次結構中基類(父類)和派生類(子類)之間指標或引用的轉換。
進行上行轉換(把派生類的指標或引用轉換成基類表示)是安全的;
進行下行轉換(把基類指標或引用轉換成派生類表示)時,由於沒有動態型別檢查,所以是不安全的。
②用於基本資料型別之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
③把空指標轉換成目標型別的空指標。
④把任何型別的表示式轉換成void型別。
沿繼承層級向上、向下及側向,安全地轉換到其他類的指標和引用
主要用於執行「安全的向下轉型(safe downcasting)」,也就是說,要確定乙個物件是否是乙個繼承體系中的乙個特定型別。支援父類指標到子類指標的轉換,這種轉換時最安全的轉換。它是唯一不能用舊風格語法執行的強制型別轉換,也是唯一可能有重大執行時代價的強制轉換。
一般用於強制消除物件的常量性
是特意用於底層的強制轉型,導致實現依賴(就是說,不可移植)的結果,例如,將乙個指標轉型為乙個整數。
ps:內部變數 __cplusplus __file__ __line__ __function__ __func__ __date__ __time__
+加 -減 *乘 /除 %求餘 ++自增 --自減
過載 (--運算子類似)
▷ 類內部過載
classname operator++() 前置++(++a)
classname operator++(int) 後置++
▷ 全域性過載
classname operator++(classname& obj) 前置++
classname operator++(classname& obj, int) 後置++
>大於 《小於 >=大於等於 <=小於等於 !=不等於 ==等於
&&與 ||或 !非
= 只能被類的成員函式過載
不能過載的操作符
例如:operator double(); // 無返回值
C 基礎1 C 中的資料型別和操作符
本文主要講解了c 的內建資料型別 內建資料型別的字面值 列舉型別和聯合型別,位操作符。一 資料型別 1.c 的基本內建資料型別有char wchar t int short long long long float double bool long double,其中,int short long ...
算術操作符和關係操作符(1)
建議模式 用 操作而不是 省去了複製物件 習題14.12,是用 去呼叫 缺點自然是複製很多次,不過為什麼會出錯,this不是和rhs一樣的引用麼?因為是成員函式,this錯在哪了 inline sales item sales item operator const sales item rhs s...
變數和操作符總結
整型變數 大致分為short int long 和 long long 這裡簡單說一下 計算機的記憶體是由一些叫做位 bit 的單位組成的 其中這些整型變數對應的資料大小也是不同的 short 16位 這裡的16位指的是二進位制的位數 32768 32767 int long 32位 2的31次方 ...