一、const作用
如下表所示:
no.
作用
說明
參考**
1可以定義const常量
const int max = 100;
2便於進行型別檢查
const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤
void f(const int i)
//對傳入的引數進行型別檢查,不匹配進行提示 3
可以保護被修飾的東西
防止意外的修改,增強程式的健壯性。
void f(const int i)
//如果在函式體內修改了i,編譯器就會報錯
4可以很方便地進行引數的調整和修改
同巨集定義一樣,可以做到不變則已,一變都變
5為函式過載提供了乙個參考
class a
//乙個函式
void f(int i) const //
上乙個函式的過載
......};6
可以節省空間,避免不必要的記憶體分配
const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝
#define pi 3.14159 //
常量巨集const doulbe pi=3.14159; //
此時並未將pi放入rom中
......
double i=pi; //
此時為pi分配記憶體,以後不再分配!
double i=pi; //
編譯期間進行巨集替換,分配記憶體
double j=pi; //
沒有記憶體分配
double j=pi; //
再進行巨集替換,又一次分配記憶體! 7
提高了效率
編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高
二、
const
的使用
1.const物件預設為檔案的區域性變數
· 在全域性作用域宣告的const變數是定義該物件的檔案的區域性變數。此變數只存在於那個檔案中,不能被其他檔案訪問。
· 要在其他檔案中訪問const變數,可以通過指定const變數為extern,就可以在整個程式中訪問const物件。
比如:
const_basic_stdy.h
#ifndef _cosnt_basic_stdy_h_
#define _cosnt_basic_stdy_h_
extern const int con_glob_int;
extern const int con_glob_int1;
#endif
const_basic_stdy.cpp
#include "const_basic_stdy.h"
const int con_glob_int = 10;
extern const int con_glob_int1 = 110;
· 非const變數的定義預設為extern。要使const變數能夠在其他檔案中訪問,必須在檔案中顯式地指定它為extern。
2. const 引用
int i = 42;
// legal for constreferences only
constint &r = 42;
constint &r2 = r + i;
3.const 標頭檔案
· 一般來說,常量表示式是編譯器在編譯時就能夠計算出結果的表示式。當 const 整型變數通過常量表示式自我初始化時,這個 const 整型變數就可能是常量表示式。而 const 變數要成為常量表示式,初始化式必須為編譯器可見。為了能夠讓多個檔案使用相同的常量值,const 變數和它的初始化式必須是每個檔案都可見的。而要使初始化式可見,一般都把這樣的 const 變數定義在標頭檔案中。那樣的話,無論該 const 變數何時使用,編譯器都能夠看見其初始化式。
· 但是,c++ 中的任何變數都只能定義一次(第 2.3.5
節)。定義會分配儲存空間,而所有對該變數的使用都關聯到同一儲存空間。因為const 物件預設為定義它的檔案的區域性變數,所以把它們的定義放在標頭檔案中是合法的。
· 當該 const 變數是用常量表示式初始化時,可以保證所有的變數都有相同的值。但是在實踐中,大部分的編譯器在編譯時都會用相應的常量表示式替換這些const 變數的任何使用。所以,在實踐中不會有任何儲存空間用於儲存用常量表示式初始化的 const 變數。
· 如果 const 變數不是用常量表示式初始化,那麼它就不應該在標頭檔案中定義。相反,和其他的變數一樣,該const 變數應該在乙個原始檔中定義並初始化。應在標頭檔案中為它新增 extern 宣告,以使其能被多個檔案共享。
extern const int num;
#include "a.h"
#include #include int r()
const int num = r();
#include "a.h"
#includeusing namespace std;
int main() private:static const int i; file://注意必須是靜態的! };
const inta::i=3;另乙個很常見的方法就是初始化列表: class a private: const int i; }; 還有一種方式就是在外部初始化,
· 如果在非const成員函式中,this指標只是乙個類型別的;如果在const成員函式中,
· this指標是乙個const類型別的;如果在volatile成員函式中,this指標就是乙個
· volatile類型別的。
· · new返回的指標必須是const型別的。
c語言中的const總結
include include include include void getmem const char p void getmem2 char const p void getmem3 char const p void getmem4 const char const p int main ...
const在C語言中的用法
const作用 防止定義的變數被修改 1 用於修飾變數 const int a 10 合法 int const b 10 合法,等價const int 10 const int c 非法 int const d 非法 注意 必須有初始值 2 用於修飾指標 const修飾的 sp,所以sp指標指向的位...
const在C語言中的用法
在c語言中,const修飾的變數具有常屬性,不可以修改它的值。例如 const int num 10 int const num 10 變數num的值不可以被改變 但是它又和變數有一些區別,例如 define line 10 const int num 10 雖然它們的值都是10,而且都不能改變,但...