最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++中const的使用詳解

 更新時(shí)間:2013年05月12日 12:49:13   作者:  
本篇文章是對c++中的const的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

Const 是C++中常用的類型修飾符,常類型是指使用類型修飾符const說明的類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓碌摹?/P>

1、定義常量
(1)const修飾變量,以下兩種定義形式在本質(zhì)上是一樣的。它的含義是:const修飾的類型為TYPE的變量value是不可變的。

 TYPE const ValueName = value;
     const TYPE ValueName = value;


(2)將const改為外部連接,作用于擴(kuò)大至全局,編譯時(shí)會(huì)分配內(nèi)存,并且可以不進(jìn)行初始化,僅僅作為聲明,編譯器認(rèn)為在程序其他地方進(jìn)行了定義.

     extend const int ValueName = value;

2、指針使用CONST
(1)指針本身是常量不可變
     (char*) const pContent;
     const (char*) pContent;

(2)指針?biāo)赶虻膬?nèi)容是常量不可變
     const (char) *pContent;
     (char) const *pContent;

(3)兩者都不可變
      const char* const pContent;

(4)還有其中區(qū)別方法,沿著*號劃一條線:
如果const位于*的左側(cè),則const就是用來修飾指針?biāo)赶虻淖兞浚粗羔樦赶驗(yàn)槌A浚?BR>如果const位于*的右側(cè),const就是修飾指針本身,即指針本身是常量。

3、函數(shù)中使用CONST

(1)const修飾函數(shù)參數(shù)
a.傳遞過來的參數(shù)在函數(shù)內(nèi)不可以改變(無意義,因?yàn)閂ar本身就是形參)

void function(const int Var);

b.參數(shù)指針?biāo)竷?nèi)容為常量不可變

void function(const char* Var);

c.參數(shù)指針本身為常量不可變(也無意義,因?yàn)閏har* Var也是形參)

void function(char* const Var);

d.參數(shù)為引用,為了增加效率同時(shí)防止修改。修飾引用參數(shù)時(shí):

void function(const Class& Var); //引用參數(shù)在函數(shù)內(nèi)不可以改變

void function(const TYPE& Var); //引用參數(shù)在函數(shù)內(nèi)為常量不可變

2)const 修飾函數(shù)返回值
    const修飾函數(shù)返回值其實(shí)用的并不是很多,它的含義和const修飾普通變量以及指針的含義基本相同。
    a.const int fun1() //這個(gè)其實(shí)無意義,因?yàn)閰?shù)返回本身就是賦值。
    b. const int * fun2() //調(diào)用時(shí) const int *pValue = fun2();
                          //我們可以把fun2()看作成一個(gè)變量,即指針內(nèi)容不可變。
    c.int* const fun3()   //調(diào)用時(shí) int * const pValue = fun2();
                          //我們可以把fun2()看作成一個(gè)變量,即指針本身不可變。

4、類相關(guān)CONST

(1)const修飾成員變量
const修飾類的成員函數(shù),表示成員常量,不能被修改,同時(shí)它只能在初始化列表中賦值。
    class A
    {
        …
        const int nValue;         //成員常量不能被修改
        …
        A(int x): nValue(x) { } ; //只能在初始化列表中賦值
     }

(2)const修飾成員函數(shù)
const修飾類的成員函數(shù),則該成員函數(shù)不能修改類中任何非const成員函數(shù)。一般寫在函數(shù)的最后來修飾。
    class A
    {
        …
       void function()const; //常成員函數(shù), 它不改變對象的成員變量.                       

//也不能調(diào)用類中任何非const成員函數(shù)。
}

(3)const修飾類對象/對象指針/對象引用

•const修飾類對象表示該對象為常量對象,其中的任何成員都不能被修改。對于對象指針和對象引用也是一樣。
•const修飾的對象,該對象的任何非const成員函數(shù)都不能被調(diào)用,因?yàn)槿魏畏莄onst成員函數(shù)會(huì)有修改成員變量的企圖。

例如:

復(fù)制代碼 代碼如下:

class AAA

    void func1(); 
  void func2() const; 

const AAA aObj; 
aObj.func1(); //×
aObj.func2(); //正確

const AAA* aObj = new AAA(); 
aObj-> func1(); //×
aObj-> func2(); //正確

5、將Const類型轉(zhuǎn)化為非Const類型的方法

C++提供了四個(gè)轉(zhuǎn)換運(yùn)算符:

•const case <new type> (expression)
•static_cast <new_type> (expression)
•reinterpret_cast <new_type> (expression)
•dynamic_cast <new_type> (expression)
 

采用const_cast 進(jìn)行非Const類型轉(zhuǎn)換。 
用法:const_cast <type_id>  (expression)
該運(yùn)算符用來修改類型的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的類型是一樣的。

•常量指針被轉(zhuǎn)化成非常量指針,并且仍然指向原來的對象;
•常量引用被轉(zhuǎn)換成非常量引用,并且仍然指向原來的對象;
•常量對象被轉(zhuǎn)換成非常量對象。

復(fù)制代碼 代碼如下:

const int constant = 21;
const int* const_p = &constant;
int* modifier = const_cast<int*>(const_p);
*modifier = 7;

當(dāng)然我們可以用下面的傳統(tǒng)方式代替:
復(fù)制代碼 代碼如下:

const int constant = 21;
int* modifier = (int*)(&constant);

從前面代碼中已經(jīng)看到,我們不能對constant進(jìn)行修改,但是我們可以對modifier進(jìn)行重新賦值。

但是但是,程序世界真的混亂了嗎?我們真的通過modifier修改了constatn的值了嗎?修改const變量的數(shù)據(jù)真的是C++去const的目的嗎?

如果我們把結(jié)果打印出來:

復(fù)制代碼 代碼如下:

cout << "constant: "<< constant <<endl;
cout << "const_p: "<< *const_p <<endl;
cout << "modifier: "<< *modifier <<endl;
/**
constant: 21
const_p: 7
modifier: 7
**/

constant還是保留了它原來的值。

可是它們的確指向了同一個(gè)地址呀:

復(fù)制代碼 代碼如下:

cout << "constant: "<< &constant <<endl;
cout << "const_p: "<< const_p <<endl;
cout << "modifier: "<< modifier <<endl;

/**
constant: 0x7fff5fbff72c
const_p: 0x7fff5fbff72c
modifier: 0x7fff5fbff72c
**/

雖然這樣可以重新賦值const的值,但是絕對不要對const數(shù)據(jù)進(jìn)行重新賦值。

相關(guān)文章

  • C++深入分析講解鏈表

    C++深入分析講解鏈表

    當(dāng)我們在寫一段代碼時(shí),如果要頻繁的在一塊區(qū)域進(jìn)行插入或者刪除操作時(shí),會(huì)發(fā)現(xiàn)用數(shù)組實(shí)現(xiàn)會(huì)比較復(fù)雜,這時(shí)候我們就要用另一種數(shù)據(jù)結(jié)構(gòu),鏈表來實(shí)現(xiàn)
    2022-06-06
  • Effective?C++?學(xué)習(xí)筆記

    Effective?C++?學(xué)習(xí)筆記

    這篇文章主要介紹了Effective?C++?學(xué)習(xí)筆記,想學(xué)習(xí)Effective?C++的朋友可以參考一下
    2023-08-08
  • C語言SetConsoleCursorPosition函數(shù)使用方法

    C語言SetConsoleCursorPosition函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorPosition函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C++獲取MD5算法實(shí)現(xiàn)代碼

    C++獲取MD5算法實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++獲取MD5算法實(shí)現(xiàn)代碼,這個(gè)是網(wǎng)上扒下來的 作者已經(jīng)無法知道是誰了 ,可以備用
    2019-04-04
  • C++中類型推斷(auto和decltype)的使用

    C++中類型推斷(auto和decltype)的使用

    在C++11之前,每個(gè)數(shù)據(jù)類型都需要在編譯時(shí)顯示聲明,在運(yùn)行時(shí)限制表達(dá)式的值,但在C++的新版本之后,引入了 auto 和 decltype等關(guān)鍵字,本文就來介紹一下C++中類型推斷(auto和decltype)的使用,感興趣的可以了解一下
    2023-12-12
  • c++ 單線程實(shí)現(xiàn)同時(shí)監(jiān)聽多個(gè)端口

    c++ 單線程實(shí)現(xiàn)同時(shí)監(jiān)聽多個(gè)端口

    這篇文章主要介紹了c++ 單線程實(shí)現(xiàn)同時(shí)監(jiān)聽多個(gè)端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • gdb調(diào)試命令的使用及總結(jié)

    gdb調(diào)試命令的使用及總結(jié)

    gdb是一個(gè)在UNIX環(huán)境下的命令行調(diào)試工具。如果需要使用gdb調(diào)試程序,請?jiān)趃cc時(shí)加上-g選項(xiàng)。下面的命令部分是簡化版,比如使用l代替list等等
    2013-05-05
  • OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法

    OpenCV中C++函數(shù)imread讀取圖片的問題及解決方法

    利用C++函數(shù)imread讀取圖片的時(shí)候返回的結(jié)果總是空,而利用C函數(shù)cvLoadImage時(shí)卻能讀取到圖像。怎么回事?今天小編通過本教程給大家簡單說明原因
    2017-03-03
  • 深入HRESULT與Windows Error Codes的區(qū)別詳解

    深入HRESULT與Windows Error Codes的區(qū)別詳解

    本篇文章是對HRESULT與Windows Error Codes的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中的socket編程實(shí)例代碼

    C語言中的socket編程實(shí)例代碼

    這篇文章主要介紹了如何用C語言實(shí)現(xiàn)socket編程,文中代碼非常詳細(xì),供大家學(xué)習(xí)參考,感興趣的朋友可以了解下
    2020-06-06

最新評論

长垣县| 贞丰县| 郸城县| 南郑县| 武城县| 新丰县| 西藏| 罗田县| 资阳市| 金塔县| 商洛市| 南宫市| 湖南省| 昭苏县| 邵东县| 龙山县| 文安县| 曲松县| 宝丰县| 仪陇县| 崇州市| 平邑县| 荔波县| 星子县| 隆安县| 惠水县| 邢台县| 天长市| 资阳市| 河源市| 梁山县| 南阳市| 卢湾区| 军事| 乡城县| 全州县| 阿鲁科尔沁旗| 鹤山市| 沙雅县| 金沙县| 荣昌县|