自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++基礎(chǔ) 詳細(xì)介紹const的用法

開發(fā) 后端
const關(guān)鍵字,它限定一個(gè)變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在觀看別人代碼的時(shí)候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。來看本文。

const可以用來定義常量,t定義時(shí),定義了常量的類型,所以更精確一些。

面向?qū)ο笫荂++的重要特性. 但是c++在c的基礎(chǔ)上新增加的幾點(diǎn)優(yōu)化也是很耀眼的。就const直接可以取代c中的#define 。以下幾點(diǎn)很重要,學(xué)不好后果也也很嚴(yán)重 。

const

1. 限定符聲明變量只能被讀

  1. const int i=5;   
  2. int j=0;   
  3. ...   
  4. i=j; //非法,導(dǎo)致編譯錯(cuò)誤   
  5. j=i; //合法  

 

2. 必須初始化

  1. const int i=5; //合法   
  2. const int j; //非法,導(dǎo)致編譯錯(cuò)誤  

 

3. 在另一連接文件中引用const常量

  1. extern const int i; //合法   
  2. extern const int j=10; //非法,常量不可以被再次賦值  

 

4. 便于進(jìn)行類型檢查

用const方法可以使編譯器對處理內(nèi)容有更多了解。

  1. #define I=10   
  2. const long &i=10; /*dapingguo提醒:由于編譯器的優(yōu)化,使得在const long i=10; 
  3. 時(shí)i不被分配內(nèi)存,而是已10直接代入以后的引用中,以致在以后的代碼中沒有錯(cuò)誤,為達(dá)到說教效果,
  4. 特別地用&i明確地給出了i的內(nèi)存分配。不過一旦你關(guān)閉所有優(yōu)化措施,即使const long i=10;也會(huì)引起后面的編譯錯(cuò)誤。*/   
  5. char h=I; //沒有錯(cuò)   
  6. char h=i; //編譯警告,可能由于數(shù)的截短帶來錯(cuò)誤賦值。  

 

5. 可以避免不必要的內(nèi)存分配

  1. #define STRING "abcdefghijklmn\n"   
  2. const char string[]="abcdefghijklm\n";   
  3. ...   
  4. printf(STRING); //為STRING分配了第一次內(nèi)存   
  5. printf(string); //為string一次分配了內(nèi)存,以后不再分配   
  6. ...   
  7. printf(STRING); //為STRING分配了第二次內(nèi)存   
  8. printf(string);   
  9. ...  

 

由于const定義常量從匯編的角度來看,只是給出了對應(yīng)的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運(yùn)行過程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個(gè)拷貝。

6. 可以通過函數(shù)對常量進(jìn)行初始化

  1. int value();   
  2. const int i=value();  

 

dapingguo說:假定對ROM編寫程序時(shí),由于目標(biāo)代碼的不可改寫,本語句將會(huì)無效,不過可以變通一下:

  1. const int &i=value();  

 

只要令i的地址處于ROM之外,即可實(shí)現(xiàn):i通過函數(shù)初始化,而其值有不會(huì)被修改。

7. 是不是const的常量值一定不可以被修改呢?

觀察以下一段代碼:

  1. const int i=0;   
  2. int *p=(int*)&i;   
  3. p=100;  

 

通過強(qiáng)制類型轉(zhuǎn)換,將地址賦給變量,再作修改即可以改變const常量值。

8. 請分清數(shù)值常量和指針常量,以下聲明頗為玩味:

  1. int ii=0;   
  2. const int i=0; //i是常量,i的值不會(huì)被修改   
  3. const int *p1i=&i; //指針p1i所指內(nèi)容是常量,可以不初始化   
  4. int * const p2i=ⅈ //指針p2i是常量,所指內(nèi)容可修改   
  5. const int * const p3i=&i; //指針p3i是常量,所指內(nèi)容也是常量   
  6. p1i=ⅈ //合法   
  7. *p2i=100; //合法  

 

以上幾點(diǎn)都是非常重要的,希望對你有幫助。

【編輯推薦】

  1. C++編譯器如何對Const常量進(jìn)行分配存儲(chǔ)空間
  2. C++ const變量使用技巧總結(jié)
  3. C# const常量詳細(xì)介紹
  4. C++中的const限定修飾符
  5. C語言的const關(guān)鍵字與指針搭配使用
責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-20 16:57:05

C++const

2011-07-14 16:26:01

2011-07-20 10:06:54

CC++const

2011-07-14 16:56:21

2011-07-14 23:27:05

C++引用

2009-08-26 17:31:59

C# const常量

2011-07-14 17:17:21

C++指針

2011-07-14 17:02:09

C++指針

2023-09-17 22:50:23

C++編程

2011-07-20 15:58:53

C++引用

2011-07-13 16:49:59

C++

2011-07-20 13:57:06

C++STL

2011-07-15 10:08:11

C++運(yùn)算符重載

2011-07-20 16:43:34

C++

2011-07-13 11:12:43

C++MFC

2010-01-11 09:56:07

C++編程實(shí)例

2017-10-30 16:50:41

Linuxconst

2011-07-20 14:12:48

2010-01-19 13:17:05

C++數(shù)據(jù)類型

2011-06-21 15:00:07

JAVAC++
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號