const
const是常量的意思,被其修飾的變量不可修改
如果修飾的是類、結構體(的指針),放在數據類型(int)前後沒有區別,其成員也不可以更改
const修飾的是其右邊的內容
雖然p1不能修改指向,但是可以去修改值
指針(point)
看看彙編
ebp-18H是指針變量p的地址值
lea指針不需要知道單位(只是取地址),mov指令需要在前面+單位(說明取值)
引用(Reference)
在C語言中,使用指針(Pointer)可以間接獲取、修改某個變量的值
在C++中,使用引用(Reference)可以起到跟指針類似的功能
引用相當於是變量的別名(基本數據類型、枚舉、結構體、類、指針、數組等,都可以有引用)
對引用做計算,就是對引用所指向的變量做計算
在定義的時候就必須初始化,一旦指向了某個變量,就不可以再改變,不能像指針一樣在去引用其他變量
可以利用引用初始化另一個引用,相當於某個變量的多個別名
不存在【引用的引用、指向引用的指針、引用數組(如int &arr[3])】
** 引用存在的價值之一:比指針更安全、函數返回值可以被賦值**
因爲指針可以修改指向
例子:交換值
函數裏可以訪問外面的值,是對外面的值的操作,而不是僅僅針對函數內部
數據類型、枚舉、結構體、類、指針、數組的引用
&符號相當於是取地址
寫法:&符號左邊是什麼類型就是什麼引用,&符號右邊就是變量的別名=變量名
指針的引用
數組的引用
數組名就是數組首地址,因此可以看做是指向數組首地址的指針(int *)
int * &a=arr 但是arr是一個常量即數組首地址,所以要+個const
引用的本質
引用的本質就是指針,只是編譯器削弱了它的功能,所以引用就是弱化了的指針
一個引用佔用一個指針的大小(在cpu架構爲X64下是8字節,x86下是4字節)
不能用sizeof(引用名),這樣出來的是被引用的變量佔用的大小
常引用(Const Reference)
**定義:**引用可以被const修飾,這樣就無法通過引用修改數據了
const必須寫在&符號的左邊,才能算是常引用
const引用的特點
1.可以指向臨時數據(常量、表達式、函數返回值等)const int &a=30;
2.可以指向不同類型的數據
3.作爲函數參數時(此規則也適用於const指針)
✓可以接受const和非const實參(非const引用,只能接受非const實參)
✓可以跟非const引用構成重載
重載
◼當常引用指向了不同類型的數據時,會產生臨時變量,即引用指向的並不是初始化時的那個變量
看看彙編,就知道原因了
相同類型時的彙編