1 C 變數和操作符

2021-08-26 23:58:16 字數 3740 閱讀 1957

基本型別(9種)

布林型(bool)  字元型(char)  寬字元型(wchar_t)  短整型(short)  整型(int)  長整型(long)  單精度浮點型(float)  雙精度浮點型(double)  長雙精度浮點型(long double)  

布林型

布林型(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

復合型別(7種)

陣列   指標*   引用&   共用體(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次方 ...