存在問題:
經常使用一個變量表示緩衝區的大小
變量能夠適當的調整空間大小
可是警戒程序改變大小spaconst的引入: 固定大小
注意:
const對象必須初始化
指針
const int i = get_size(); //√ 運行時初始化 const int bufSize = 512; // √ 編譯時初始化 const int k; //×
曲線救國
const的值是不能被修改的
可是,能夠把const變量拷貝出來,給新的對象,這樣就能夠修改新的對象的值來達到修改數據值目的
const的變量值依舊不變若是利用一個對象去初始化另外一個對象,他們是否是const都可有可無
code
int i = 42; int const ci = i; // unconst->const int j = ci; //const->unconst j = 1024;
默認狀態下,const對象僅在文件內有
在一個文件中, const變量在編譯過程當中,編譯器會把全部的const變量 用 初始化的值代替
爲了在多個文件中 使得const 變量都有效
因此會使用extern關鍵字對象
extern const int burSize = 512;
tips:
這種定義通常都是在頭文件中
而後其餘文件引入該頭文件
對const的引用 :把引用綁定到const對象上
special: 對cons的引用,不能用於修改他所綁定的對象
除了兩個例外以外,引用類型 必須與 所引用對象的類型一致
int i = 42; const int &ri = i; const int j = 50; //× int &rj = j; const int k = 60; const int &rk = k;
總結:
const變量能夠引用非const變量,
非const變量不能引用const變量
const變量能夠引用const變量
int i = 42; int &ri = i; const int &ri2 = i; int const &ri3 = i; // 這兩個寫法是等同的,表示a是一個int常量
ri,ri2,ri2,在這種狀況下,ri2和ri3不能夠被修改,ri能夠被修改
可是ri被修改後,會影響綁定的ri2和ri3
const int和 int const 對於常量而言,寫法是相同的,對於指針而言不一樣
⭐1. 初始化引用:能夠用任意表達式做爲初始值,只要該表達式能轉化成該類型
double dval = 3.14; const int &ri = dval;
具體過程: 3.14從double轉化爲了int型並存入了temp
double dval = 3.14; const int temp = dval; ⭐ const int &ri = temp;
temp就是臨時量 temporary
容許指向常量的指針,指向很是量對象
double dval = 3.14; const double *dp = &dval;
const int targetc = 5; const int *ptri = &targetc; int target = 6; const int *ptri2 = ⌖ //× const double *ptrd = &targetc; //× int *ptr2 = &targetc;
指針能夠指向常量值,也能夠指向很是量值
指向常量值的 指針(pointer to const):不能用於修改所指對象的值
(不管所指對象是不是const)
而常量對象的地址,只能使用指向常量的指針
總結:
const -> x 或者 -> const x
引用不是對象,而指針是對象
因此const除了能夠修飾 指針所指對象外(pointer to const),也能夠修飾修飾指針本身(const pointer)
const pointer : 肯定指向,可是不影響所指對象數據變化
int target = 1024,target2 = 256; int *const pi = ⌖ target = 2048; //√ //× pi = &target2;
頂層const(top-level const)鎖方向
底層const(low-level const)鎖數據
注意 : 當進行拷貝操做時,top-level const不受影響,可是low-level const影響較大
**`當拷貝時候,拷入和拷出的對象都必須具備const資格,或者兩個對象的數據類型能轉換成一致,(很是量x 轉化爲 常量const x)
int i = 0; const int ci = 2; const int &c_ri = i; const int &c_ri_c = ci; //用於聲明的const,low-level const int &ri = i; //x int &ri_c = ci;