很多引用自c++ primer一書
比如有時候需要將乙個文字中的資料複製到另外乙個文字。我們需要使用緩衝區,緩衝區的大寫我們可以自己來決定比如1024個位元組,這是乙個常量,我們使用bufsize = 1024.
但是bufersize物件本身是乙個變數。所以我們可以引入const限定符,它將乙個物件轉化為常量。
const int bufsize = 1024
定義bufsize常量並初始化為1024,而且在定義後就不能修改所以必須初始化
(【這裡再提乙個別的問題定義和初始化是什麼?以及初始化和賦值之間的區別?這裡不是重點】
定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中變數有且僅有乙個初值。
初始化指的是建立變數並且給它賦初值。賦值則是擦出物件的當前值並用新的值來代替。(這裡稍微注意就行不用太過糾結))
const變數預設為檔案的區域性變數
file1.c
int counter; //定義
file2.c
extern int counter ;//至於要宣告就可以在另乙個檔案中使用file1.c中的變數
counter++;
與其他變數變數不同,除非特別宣告,在全域性作用域宣告的const變數是定義該物件的檔案的區域性變數,即不能通過file1的counter在file2.c中引用。
但是用extern修飾就可以了
例如:file1.c
extern const counter = fcn();//counter 定義為extern
file2.c
extern const counter ;
const 引用
const 引用是指向const物件的引用。
什麼是引用?
引用就是物件的另乙個名字
引用必須用該引用同型別的物件進行初始化
int ival =1024;//一定要初始化
int &refval = ival;
需要注意的是作用在引用的所有操作實際上都是作用在引用所繫結的物件上
refval += 2
相當於 ival加2;
const int ival = 1024;
const int &refval = ival;//正確,用物件進行初始化
int &ref = ival//錯誤,ref不是const引用,可以通過ref改變ival的值這是不被允許的。
const引用是指向const物件的引用
值得注意的是:
int i= 42
const int &r1 = 42; //這裡引用繫結的物件是誰呢??
const int &2 = r+i;
而對於非const的引用是不合法的。
這裡提出乙個問題如果將引用繫結到不同型別會怎麼樣
double a = 3.04;
const int &b = a;
(編譯器做的事情生成乙個中間變數 int temp = a; const int &b = temp )
如果是乙個非const型別的引用那麼我們改變b的值,實際上改變的是中間變數的值而a的值並沒有改變這一點值得注意。
小結:
首先使用const限定符的物件值不能改變而且必須初始化。
其次在兩個檔案中如果你使用const限定符定義的物件要在另乙個檔案中引用,必須用extern
const引用可以初始化不同型別的引用或者初始化為又值
非const引用只能繫結在與該引用同型別的物件上。
新手一枚,才疏學淺。第一次寫部落格有疏失的地方請大家提出,謝謝。
異常,const限定符
異常 1.掌握語句 throw 用於丟擲異常資訊,交出 控制權,一旦丟擲資訊,被catch子句捕獲到異常資訊,的控制權就轉移到對應的子句上了。丟擲多種資料型別。catch捕獲 try 這個語句上執行可能出現異常的 塊,如果有異常,可以搭配throw語句。catch 捕獲異常,搭配try語句使用。in...
const 型別限定符
1.以const關鍵字宣告的物件,其值不能通過賦值或遞增 遞減來修改。例 const int a 限定a的值不能被修改 a 12 不允許 2.在指標中使用const const float pf pf指向乙個float型別的const,建立了pf指向的值不能更改 float const pt pt是...
指標和const限定符
const int p 1,表示p指向乙個整型變數,並且該變數為const的。2,可以更改p的值,不可以更改它所指向物件的值。3,它可以指向非const型別的int變數 int const p 1,表示p指向乙個整型變數,該變數為非const的 2,不可以更改p的值,一旦初始化不可更改,單可以更改它...