C++ 語言const與C語言的對(duì)比
在<C++ 語言對(duì)C語言的增強(qiáng)(一)>中,講解了(1)C++ 的實(shí)用性增強(qiáng)(2)變量檢測(cè)增強(qiáng)(3)C++中所有變量和函數(shù)都必須有類型(4)struct 類型增強(qiáng);詳情請(qǐng)點(diǎn)擊
http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87326&fromuid=324757
在< C++ 語言對(duì)C語言的增強(qiáng)(二)>中,我們講解了(1)新增的bool運(yùn)算符;(2)三目運(yùn)算符的增強(qiáng);(3)C++中真正的枚舉。詳情請(qǐng)點(diǎn)擊<請(qǐng)編輯老師放入上次的鏈接>。今天我們來看一下C++中const與C語言中的不同。
- 什么是const?
const是一個(gè)C語言(ANSI C)的關(guān)鍵字,它限定一個(gè)變量不允許被改變,產(chǎn)生靜態(tài)作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時(shí)候,清晰理解const所起的作用,對(duì)理解對(duì)方的程序也有一些幫助。另外CONST在其他編程語言中也有出現(xiàn),如C++、PHP5、B#.net、HC08 C、C#。(以上解釋來自百度百科)
- Const的基本用法
const int a;
int const b;
//第?個(gè)第?個(gè)意思?樣 代表?個(gè)常整形數(shù)
const int *c;
//第三個(gè) const 修飾的 *c,即c是?個(gè)指向常整形數(shù)的指針(所指向的內(nèi)存數(shù)據(jù)不能被修改,但是本?可以修改)
int * const d;
//第四個(gè) const修飾的是d,即d為常指針(指針變量不能被修改,但是它所指向內(nèi)存空間可以被修改)
const int * const e ;
//第五個(gè) 第一個(gè)const修飾的是*e,則*e的值,即所指向的內(nèi)存數(shù)據(jù)不能修改,第二個(gè)const修飾的e,即e的指向不能修改,所以e是 ?個(gè)指向常整形的常指針(指針和它所指向的內(nèi)存空間,均不能被修改) |
不知道以上的基礎(chǔ)用法,你明白了嗎?(ps:不明白的話,再看三遍)下面就來看看C語言中的const吧。
- C語言中的冒牌const
什么?你說你不相信,const還有冒牌,不相信就來看看下邊的代碼吧
#include <stdio.h>
int main()
{
const int a = 10;
int *p = &a;
printf("a===>%d\n", a);
*p = 11;
printf("a===>%d\n", a);
return 0;
} |
以上代碼在C語言編譯器中的運(yùn)行結(jié)果為:
怎么樣,用const定義的a;就這樣被改變了,這足以說明C語言中的const是”冒牌貨”了吧!
再看看同樣的代碼在C++編譯器中運(yùn)行的結(jié)果:
直接報(bào)錯(cuò)了有沒有,這才是真正的const吧。什么,你說來個(gè)強(qiáng)轉(zhuǎn),將const int* 強(qiáng)轉(zhuǎn)為const 就可以了,那咱們看代碼吧!
強(qiáng)轉(zhuǎn)之后是不報(bào)錯(cuò)了,但是你看,a的值被改變了嗎?沒有吧,還不信你就自己寫個(gè)代碼,運(yùn)行下試試吧!
- Const和#define的區(qū)別
#include <iostream>
void fun1()
{
#define a 10
const int b = 20;
}
void fun2()
{
printf("a = %d\n", a);
//printf("b = %d\n", b);
}
int main()
{
fun2();
return 0;
} |
通過這段代碼你發(fā)現(xiàn)什么了嗎?
在fun1函數(shù)中通過#define定義的a在fun2函數(shù)中可以使用,而通過const定義的b則不能在fun2中使用,這是為什么呢?你明白嗎?
這是因?yàn)?define 宏定義發(fā)生在預(yù)處理階段,只是簡單的類型轉(zhuǎn)換,不做語法檢查和變量作用域檢查,而const常量則發(fā)生在編譯階段,會(huì)進(jìn)行語法檢查和變量作用域檢查,而變量b在fun1中定義,只在fun1中可用,在fun2函數(shù)中不能使用。
- Const的好處
合理的利用const修飾變量的好處:
1)指針做函數(shù)參數(shù)時(shí),用const修飾表明是只讀,即不可修改參數(shù)的值,可以有效的提高代碼可讀性,減少bug;
2)可以清楚的分清參數(shù)的輸入和輸出特性
今天的講解就到這里了,如果想了解更多的知識(shí),請(qǐng)持續(xù)關(guān)注我們的論壇。
本文版權(quán)歸傳智播客C++培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客C/C++培訓(xùn)學(xué)院
首發(fā):http://m.fskzgqt.cn/c/