2.1 基本內建型別
2.1.1算術型別
- 有符號型的型別,例如 signed int a;int佔用4個位元組,32bit的數據。這32bit的首位,作爲符號位:1爲負,0爲正;這樣的話,只能用剩下的31bit來表示數的大小,則a的數據值範圍爲:-231——231-1
- 無符號型的型別,例如unsigned int a;int佔用4個位元組,32bit的數據。因爲無符號位,故32bit全部來表示數的大小,則a的範圍爲:0-232-1
2.1.2型別轉換
- 這一部分,書上只要講解的是,型別轉換的注意事項,對於自己使用來說,儘量規避這種使用即可;
- c++中的型別強制轉化(兩種方式均可)
int i = 10;
double j = (double)i;
int i = 10;
double j = double(i);
2.1.3字面值常數
- 用字首和後綴來指定字面值的型別
2.2 變數
2.2.1變數的定義
- 注意:初始化不是賦值,初始化的含義,船艦變數的同時賦予其一個初始值;賦值的含義是把物件的當值擦除,來用一個新值代替。
- 這一塊還提到了:列表初始化。這個是要是用於對物件初始化。
- 這一塊還提到了:預設初始化。這啥意思呢,比如,你定義一個全域性變數int a;,在main之外定義,這個數肯定是存放在全域性靜態區,預設被初始化爲0。
2.2.2變數宣告與定義的關係
- 定義:申請儲存空間,建立與名字關聯的實體
- 宣告:使得名字爲程式所知,告訴這個檔案,有這個值得存在,且已經被定義了
- 有兩個檔案a.cpp和b.cpp,如果b想要用a中的變數,我們只需要在a.h裏面寫上 extern int a ;而且宣告不能給變數賦值,否則extren失效,會報錯
2.2.3識別符號
- 識別符號:數位、字母、下劃線組成
- 只能以字母、下劃線開頭
- 字母的大小寫,C++會做區分的
2.2.4變數命名規範
- 變數名一般採用小寫
- 使用者自定義的類名一般以大寫字母開頭
- 若識別符號由多個單詞組成,應用下劃線區分開
- 宏定義定義東西,一般全部使用大寫字母
2.2.5名字的作用域
#include <iostream.h>
int temp = 10;
int main()
{
int temp = 20;
cout<<::temp<<endl;
cout<<temp<<endl;
}
2.3 複合型別
2.3.1參照
- 參照其實就是爲變數、物件起了一個別名
- 參照在定義的時候,必須初始化
- 參照常用於作爲函數的形參使用
- 參照其實就是「簡化」的指針
int temp = 10;
int &ref = temp;
int &ueue = ref;
2.3.2指針
- 與C語言相差無幾,不再贅述
- 注意的是,在C++11新標準中,當指針指向空的時候,最好用nullptr,儘量避免用NULL
2.4 const限定符
- const的物件一旦建立,其值就不能在改變了
- C++中,在定義常數的時候,儘量用const代替宏定義#define
- const常數,若想讓其它檔案共用,必須要在定義和宣告的前面都要新增extern,這一點是與普通的變數不相同的。例如:
extern const int temp = 100;
extern const int temp;
2.4.1const的參照
- temp、ueue都不能修改
const int temp = 10;
const int &ueue = temp;
- 可以通過修改temp而改變ueue,但是不可以通過ueue來改變temp
int temp = 10;
const int &ueue = temp;
const int &Queue =55;
int &Queue = 55;
2.4.2const的參照與指針以及頂層const
- 這一塊,確實有點噁心,尤其是這個相互賦值問題,看書看的我有點暈。先跳過吧。
- 先記住最基本的:
const char *temp
char *const temp
const char *const temp
2.5 處理型別
2.5.1型別別名
typedef int ElemType;
ElemType temp = 10;
- C++11新規(C++20都出了我還在看C++11,/哭)
using ElemTpye = int;
ElemType temp = 10;
2.5.2auto型別說明符
- 這個東西是個啥呢?
- 程式設計的時候,往往需要把表達式的值賦給變數,這個表達式可能是一個函數,但是有時候呢,這個函數或者表達式呢根本找不到,那我們在定義變數的時候,就不知道定義什麼型別了,而這個auto可以幫我們自動分析這個表達式是什麼型別
auto item = val1 + val2;
- atuo還有與常數以及複合型別的結合,有點複雜,沒看
2.5.3decltype型別指示符
- 有時候,我們需要知道右值表達式的型別,但是並不想用該表達式的值初始化變數,也是不想去執行這個表達式,而auto呢,需要去執行這個表達式,注意這個兩個的區別。
decltype (fun()) sum = x;
- 這塊最簡單的,先知道auto和dectltype是幹啥的就行了。