C++:引用、const
一、const
我們都知道const 修飾符修飾一個變數,使用const修飾之後,這個變數相當於常量了,它的值在程式碼其他部分不能再修改,這對於函式呼叫時候,防止錯誤的修改原本不應修改的變數起到很大作用。
在C語言中,const修飾常變數:在編譯階段常變數沒有左值,其他和普通變數處理相同。
在C++中,const修飾的是常量:在編譯階段把用到常量的地方替換成常量初始值。
使用規則如下:
①、一定要初始化
②、不能有修改常量記憶體塊的風險
③、const修飾的全域性符號是一個local屬性
注:extern const修飾的全域性變數的符號宣告成global屬性
extern const int gdata=10;//global屬性
④、用變數來初始化常量,常量退化成常變數
int b=10;
const int a=b;
int arr[a];
二、引用 &:
在學習之前我們所瞭解的是&為取地址符號,但還有一種用法是&為引用符號,即記憶體單元的別名,底層以指標方式支援,在引用使用的地方(實現點)系統自帶解引用過程。
#include<iostream> using namespace std; int main() { int a = 10; int& b = a; b = 20; cout << a << " " << &a << endl; cout << b << " " << &b << endl; } 輸出結果為: a 20 b 20
1.普通引用規則:
①.引用一定要初始化
②.引用 引用的 變數一定要能取地址
③.引用不可改變
④.引用只能訪問引用所指向記憶體塊的內容
2. 常引用:
①.const &:引用引用的變數不能取地址時使用,此時常引用可以處理,數值將會放到記憶體的臨時量中,臨時量因為在記憶體中,有地址,常引用引用臨時量的記憶體單元(地址)。
const int& c = 10;//10無地址
②.const和一級指標的結合
//錯誤使用
int a = 10;
int*p = &a;
int* q = p;
//正確使用
const int a = 10;
const int* p = &a;
const int* q = p;
③.const和二級指標的結合
//錯誤
int a = 10;
int* p = &a;
int**q = &p;
//正確
const int a = 10;
const int* p = &a;
const int**q = &p;
④.const和形參結合 :1.防止實參被修改 2.接受臨時量
int Mul(const int& a, const int& b)
{
return a * b;
}
int main()
{
int a = 10;
int b = 20;
Mul(10, 20);
return 0;
}
⑤.const和返回值結合 :不能返回區域性變數地址或引用
//錯誤
int& getData(int data)
{
int tmp = data;
return tmp;//lea, eax, [tmp] //&tmp
}