亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

const關鍵字如何在C++中使用

發布時間:2021-03-31 17:08:45 來源:億速云 閱讀:113 作者:Leah 欄目:編程語言

這篇文章給大家介紹const關鍵字如何在C++中使用,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

C++中的const更像編譯階段的#define

const int m = 10;
int n = m;

變量是要占用內存的,即使被const修飾也不例外。m,n兩個變量占用不同的內存,int n = m;表示將m的值賦給n。

  • 在C語言中,編譯器會先到m所在的內存取出一份數據,再將這份數據賦給n;

  • 在C++中,編譯器會直接將10賦給m,沒有讀取內存的過程,和int n = 10效果一樣。

  • 在C++中的常量更類似于#define命令,是一個值替換的過程,只不過#define是在預處理階段替換,而常量是在編譯階段替換。

C++中的const

  • 優點:提高了程序執行效率

  • 缺點:不能反映內存的變化,一旦const變量被修改,C++就不能取得最新的值。

const變量禁止被修改 --- 只是語法層面上的限制,通過指針仍然可以修改。

#include <stdio.h>
int main(){
 const int n = 10;
 //注意:&n得到的指針的類型是const int*,必須強制轉換為int*后才能賦給p,否則類型是不兼容的。 
 int *p = (int*)&n; //必須強制類型轉換
 *p = 99; //修改const變量的值
 printf("%d\n", n);
 return 0;
}
//以C語言的方式編譯,運行結果是99
//以C++的方式編譯,運行結果是10

//在C語言中,輸出n時會到內存中獲取n的值,這個時候n所在的內存中的數據已經被修改成了99
//在C++中,print("%d\n", n);語句在編譯時就將n的值替換成了10,不管n所在內存如何變化,都不影響輸出結果。

C++中全局const變量的可見范圍是當前文件

普通全局變量的作用域是當前文件,但是在其他文件中也是可見的,使用extern聲明后就可以使用。

/*源文件1*/
#include <stdio.h>
#include"func.cpp"

int n = 10;
void func();
int main(){
func();
printf("main: %d\n", n);
return 0;
}
/*源文件2*/
#include <stdio.h>

extern int;
void func();
{
printf("module: %d\n", n);
}
/*運行結果:*/
module:10
main:10

//在C語言中,const變量和普通變量一樣,在其他源文件中也是可見的。
const int n = 10;

//在C語言中的const變量在多文件編譯時的表現和普通變量一樣,除了不能修改,沒有其他區別。
//在C++中,修改后的代碼是錯誤的。

C++規定全局const變量的可見范圍僅限于當前源文件,所以可以將它放在頭文件中,這樣即使頭文件被包含多次也不會出錯。

總結:

C++中的const變量雖然也會占用內存,也能使用&獲取它的地址,但是使用時卻更像編譯時期的#define;
#define也是值替換,可見范圍也是當前文件;
#define定義的常量僅僅是字符串的替換,不會進行類型檢查,
而const定義的常量是有類型的,編譯器會進行類型檢查。

知識點補充:

const修飾函數參數

const修飾參數是為了防止函數體內可能會修改參數原始對象。因此,有三種情況可討論:

  • 函數參數為值傳遞:值傳遞(pass-by-value)是傳遞一份參數的拷貝給函數,因此不論函數體代碼如何運行,也只會修改拷貝而無法修改原始對象,這種情況不需要將參數聲明為const。

  • 函數參數為指針:指針傳遞(pass-by-pointer)只會進行淺拷貝,拷貝一份指針給函數,而不會拷貝一份原始對象。因此,給指針參數加上頂層const可以防止指針指向被篡改,加上底層const可以防止指向對象被篡改。

  • 函數參數為引用:引用傳遞(pass-by-reference)有一個很重要的作用,由于引用就是對象的一個別名,因此不需要拷貝對象,減小了開銷。這同時也導致可以通過修改引用直接修改原始對象(畢竟引用和原始對象其實是同一個東西),因此,大多數時候,推薦函數參數設置為pass-by-reference-to-const。給引用加上底層const,既可以減小拷貝開銷,又可以防止修改底層所引用的對象。

關于const關鍵字如何在C++中使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

成都市| 泸州市| 正蓝旗| 南漳县| 富锦市| 阿荣旗| 喀喇沁旗| 巴楚县| 敦化市| 汕尾市| 望都县| 开封县| 普格县| 尖扎县| 连江县| 眉山市| 永昌县| 乌兰察布市| 湛江市| 巴彦淖尔市| 祁阳县| 阿拉尔市| 芒康县| 胶州市| 陕西省| 甘肃省| 绥棱县| 新安县| 澄城县| 贡觉县| 芜湖市| 墨江| 新晃| 普定县| 澄城县| 朝阳区| 阿克陶县| 宝清县| 荥经县| 怀来县| 大理市|