亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ const關(guān)鍵字的實(shí)例用法

 更新時(shí)間:2020年02月21日 11:12:25   作者:xiaobaizzZ  
在本篇文章里小編給大家整理的是一篇關(guān)于C++ const關(guān)鍵字的實(shí)例用法,需要的朋友們可以學(xué)習(xí)下。

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

const int m = 10;
int n = m;

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

  • 在C語(yǔ)言中,編譯器會(huì)先到m所在的內(nèi)存取出一份數(shù)據(jù),再將這份數(shù)據(jù)賦給n;
  • 在C++中,編譯器會(huì)直接將10賦給m,沒(méi)有讀取內(nèi)存的過(guò)程,和int n = 10效果一樣。
  • 在C++中的常量更類(lèi)似于#define命令,是一個(gè)值替換的過(guò)程,只不過(guò)#define是在預(yù)處理階段替換,而常量是在編譯階段替換。

C++中的const

  • 優(yōu)點(diǎn):提高了程序執(zhí)行效率
  • 缺點(diǎn):不能反映內(nèi)存的變化,一旦const變量被修改,C++就不能取得最新的值。

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

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

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

C++中全局const變量的可見(jiàn)范圍是當(dāng)前文件

普通全局變量的作用域是當(dāng)前文件,但是在其他文件中也是可見(jiàn)的,使用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);
}
/*運(yùn)行結(jié)果:*/
module:10
main:10

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

//在C語(yǔ)言中的const變量在多文件編譯時(shí)的表現(xiàn)和普通變量一樣,除了不能修改,沒(méi)有其他區(qū)別。
//在C++中,修改后的代碼是錯(cuò)誤的。

C++規(guī)定全局const變量的可見(jiàn)范圍僅限于當(dāng)前源文件,所以可以將它放在頭文件中,這樣即使頭文件被包含多次也不會(huì)出錯(cuò)。

總結(jié):

C++中的const變量雖然也會(huì)占用內(nèi)存,也能使用&獲取它的地址,但是使用時(shí)卻更像編譯時(shí)期的#define;
#define也是值替換,可見(jiàn)范圍也是當(dāng)前文件;
#define定義的常量?jī)H僅是字符串的替換,不會(huì)進(jìn)行類(lèi)型檢查,
而const定義的常量是有類(lèi)型的,編譯器會(huì)進(jìn)行類(lèi)型檢查。

知識(shí)點(diǎn)補(bǔ)充

const修飾函數(shù)參數(shù)

const修飾參數(shù)是為了防止函數(shù)體內(nèi)可能會(huì)修改參數(shù)原始對(duì)象。因此,有三種情況可討論:

  • 函數(shù)參數(shù)為值傳遞:值傳遞(pass-by-value)是傳遞一份參數(shù)的拷貝給函數(shù),因此不論函數(shù)體代碼如何運(yùn)行,也只會(huì)修改拷貝而無(wú)法修改原始對(duì)象,這種情況不需要將參數(shù)聲明為const。
  • 函數(shù)參數(shù)為指針:指針傳遞(pass-by-pointer)只會(huì)進(jìn)行淺拷貝,拷貝一份指針給函數(shù),而不會(huì)拷貝一份原始對(duì)象。因此,給指針參數(shù)加上頂層const可以防止指針指向被篡改,加上底層const可以防止指向?qū)ο蟊淮鄹摹?/li>
  • 函數(shù)參數(shù)為引用:引用傳遞(pass-by-reference)有一個(gè)很重要的作用,由于引用就是對(duì)象的一個(gè)別名,因此不需要拷貝對(duì)象,減小了開(kāi)銷(xiāo)。這同時(shí)也導(dǎo)致可以通過(guò)修改引用直接修改原始對(duì)象(畢竟引用和原始對(duì)象其實(shí)是同一個(gè)東西),因此,大多數(shù)時(shí)候,推薦函數(shù)參數(shù)設(shè)置為pass-by-reference-to-const。給引用加上底層const,既可以減小拷貝開(kāi)銷(xiāo),又可以防止修改底層所引用的對(duì)象。

以上就是C++ const關(guān)鍵字的實(shí)例用法的詳細(xì)內(nèi)容,更多關(guān)于C++ const關(guān)鍵字請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c++中struct使用注意事項(xiàng)

    c++中struct使用注意事項(xiàng)

    本文通過(guò)2個(gè)小示例給大家展示了一下c++中struct使用的注意事項(xiàng),希望對(duì)大家學(xué)習(xí)C++能夠有所幫助。
    2016-01-01
  • C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[二]

    C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[二]

    C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[二]...
    2007-02-02
  • 堆基本操作實(shí)現(xiàn)最大堆

    堆基本操作實(shí)現(xiàn)最大堆

    這篇文章主要介紹了堆基本操作實(shí)現(xiàn)最大堆,需要的朋友可以參考下
    2014-02-02
  • c++中nlohmann?json的基本使用教程

    c++中nlohmann?json的基本使用教程

    nlohmann/json 是一個(gè)C++實(shí)現(xiàn)的JSON解析器,使用非常方便直觀(guān),下面這篇文章主要給大家介紹了關(guān)于c++中nlohmann?json基本使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • fatal error LNK1104: 無(wú)法打開(kāi)文件“l(fā)ibc.lib”的解決方法

    fatal error LNK1104: 無(wú)法打開(kāi)文件“l(fā)ibc.lib”的解決方法

    本篇文章是對(duì)fatal error LNK1104: 無(wú)法打開(kāi)文件“l(fā)ibc.lib”的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析

    用getchar()函數(shù)讀取字符串時(shí),字符串會(huì)存儲(chǔ)在輸入緩沖區(qū)中,包括輸入的回車(chē)字符,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中g(shù)etchar()的原理以及易錯(cuò)點(diǎn)解析的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • C++中?‘=default?’及‘?=delete?’的使用

    C++中?‘=default?’及‘?=delete?’的使用

    這篇文章主要介紹了C++中?=default?及?=delete?使用,使用=default和=delete可以控制編譯器默認(rèn)函數(shù)體的使用,下面我們就來(lái)看看具體的室友方法吧,需要的朋友也可以參考一下
    2021-12-12
  • 基于OpenCV?差分法實(shí)現(xiàn)綠葉識(shí)別

    基于OpenCV?差分法實(shí)現(xiàn)綠葉識(shí)別

    物體識(shí)別是圖像處理學(xué)在現(xiàn)實(shí)生活中較多的應(yīng)用之一,本文提供了一種相對(duì)簡(jiǎn)單的思路來(lái)實(shí)現(xiàn)綠葉識(shí)別,適合初學(xué)圖像處理的新人研究參考。感興趣的同學(xué)可以關(guān)注一下
    2021-11-11
  • C語(yǔ)言正則表達(dá)式操作示例

    C語(yǔ)言正則表達(dá)式操作示例

    這篇文章主要介紹了C語(yǔ)言正則表達(dá)式操作,結(jié)合實(shí)例形式分析了C語(yǔ)言正則匹配類(lèi)似郵箱格式功能的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • 深入理解Qt信號(hào)槽機(jī)制

    深入理解Qt信號(hào)槽機(jī)制

    信號(hào)槽是 Qt 框架引以為豪的機(jī)制之一。本文主要介紹了Qt信號(hào)槽機(jī)制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論