【C++】第二章:變數和基本型別

2020-08-11 22:24:48

2.1 基本內建型別

2.1.1算術型別

在这里插入图片描述

  • 這裏說一下有符號型與無符號型的數值表示範圍:
  1. 有符號型的型別,例如 signed int a;int佔用4個位元組,32bit的數據。這32bit的首位,作爲符號位:1爲負,0爲正;這樣的話,只能用剩下的31bit來表示數的大小,則a的數據值範圍爲:-231——231-1
  2. 無符號型的型別,例如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字面值常數

23

34

  • 用字首和後綴來指定字面值的型別
    在这里插入图片描述

2.2 變數

2.2.1變數的定義

  • 這一小節的寫一下注意事項吧
  1. 注意:初始化不是賦值,初始化的含義,船艦變數的同時賦予其一個初始值;賦值的含義是把物件的當值擦除,來用一個新值代替。
  2. 這一塊還提到了:列表初始化。這個是要是用於對物件初始化。
  3. 這一塊還提到了:預設初始化。這啥意思呢,比如,你定義一個全域性變數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;  //表示全域性的temp
	cout<<temp<<endl;   //表示main裏面的temp 
}

2.3 複合型別

2.3.1參照

  • 參照其實就是爲變數、物件起了一個別名
  • 參照在定義的時候,必須初始化
  • 參照常用於作爲函數的形參使用
  • 參照其實就是「簡化」的指針
int temp = 10;
int &ref = temp;
int &ueue = ref;
//temp ref ueue 相互系結,操作一個即在對另外兩個操作,在呼叫參照的時候,無須加&

2.3.2指針

  • 與C語言相差無幾,不再贅述
  • 注意的是,在C++11新標準中,當指針指向空的時候,最好用nullptr,儘量避免用NULL

2.4 const限定符

  • const的物件一旦建立,其值就不能在改變了
  • C++中,在定義常數的時候,儘量用const代替宏定義#define
  • const常數,若想讓其它檔案共用,必須要在定義和宣告的前面都要新增extern,這一點是與普通的變數不相同的。例如:
//test.cpp
extern const int temp = 100;  //定義
//test.h
extern const int temp;  //宣告
//其他檔案呼叫test.h即可

2.4.1const的參照

  • 這塊用文字表達比較複雜,我還是直接舉例子好了
  1. temp、ueue都不能修改
const int temp = 10;
const int &ueue = temp;
  1. 可以通過修改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;
//auto能識別出等號右側的型別,從而用該型別定義item
  • atuo還有與常數以及複合型別的結合,有點複雜,沒看

2.5.3decltype型別指示符

  • 有時候,我們需要知道右值表達式的型別,但是並不想用該表達式的值初始化變數,也是不想去執行這個表達式,而auto呢,需要去執行這個表達式,注意這個兩個的區別。
decltype (fun()) sum = x;
  • 這塊最簡單的,先知道auto和dectltype是幹啥的就行了。