const 在基本語言中的總結

2021-07-13 09:57:49 字數 3138 閱讀 2572

一、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,而且都不能改變,但...