1. 程式人生 > >C++:引用、const

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
}