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

c++中的const_cast用法大全

 更新時間:2021年07月29日 11:09:49   作者:guangod  
const_cast轉(zhuǎn)換符是用來移除變量的const或volatile限定符。對于后者,我不是太清楚,因為它涉及到了多線程的設(shè)計,今天重點給大家介紹c++中的const_cast用法大全,需要的朋友參考下吧

const_cast是一種C++運算符,主要是用來去除復(fù)合類型中const和volatile屬性(沒有真正去除)。

const_cast:作用:

指針或引用的轉(zhuǎn)換符,用來移除變量的const或volatile限定符。

先來看c中不嚴謹?shù)牡胤剑?/p>

const int ca = 30;
 int* q = &ca;//C中是可以編譯的,最多會得到一個warning,隨后就可以對ca里的數(shù)據(jù)進行操作了。
疑問:那const幾乎是失效的。

在c++編譯中就會報錯:

error: invalid conversion from ‘const int*' to ‘int*' [-fpermissive]//無效的轉(zhuǎn)換,把const int交給int.從這個提示,也可看出針對的是指針。int* q = &ca;

const_cast應(yīng)用場景?? 不具實際意義的用法:

const int ca=30;
const int* p=&ca;
int* q=const_cast<int*>p;
*q=10;//打印一下ca/p/q的地址可以看到地址是一樣的,但ca的值仍是30,其他兩個值都變?yōu)榱?0

雖然沒有實際應(yīng)用的意義,但可以看到const_case的意義,確實如c一樣,可以將地址給另外一個指針,同時修改另外指針所指空間里面值,確實是可以修改里面的值。但原const聲明的變量的值也沒有變。指向地址是一個地址,但值確有兩種,是不是不太對呢???如何來正確理解呢?

當(dāng)使用const聲明一個常量時,在C++中,就是作為一個常量寫到ROM(單片機里面的概念,對于PC來說,可以理解為寫到了磁盤中),并且這個ROM地址映射到內(nèi)存,指向的地址不變。

當(dāng)使用const_cast,去除掉const限定后,將地址賦給另外的變量指針,改變變量指針的值,確實是改變了內(nèi)存地址中存的數(shù)據(jù),但并沒有改變在外存中的數(shù)據(jù)。所以此時讀取變量指針的值,其實是取的內(nèi)存中的數(shù)據(jù),看到的就是改變的值。

const_cast實際編程應(yīng)用:

需要使用const聲明的常量的值,尤其是調(diào)用了一個參數(shù)不是const的函數(shù),而我們要傳進去的實際參數(shù)確實const的情形。
使用帶const指針指向一個變量時,需要修改變量的值。如下代碼:

int a = 10;
const int* p = &a;
int* q=const_cast<int*>p;
*q=24;//可以得到a,q,p都指向同一地址,同時值也被同時修改了。

整體測試代碼如下:

#include <iostream>
using namespace std;
int main(int argc, const char** argv) {
    int a = 10;
    const int* p = &a;  
    const int ca = 30;
    int* q;
    
    cout << "a adress is:\t" << &a << "\ta is:\t" << a << endl;
    cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
    q = const_cast<int*>(p);
    *q = 24;
    cout << "a adress is:\t" << &a << "\ta is:\t" << a << endl;
    cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
    cout << "q adress is \t" << q << "\t *q is\t" << *q << endl;
    cout << "=======================" << endl;
    p = &ca;
    q = const_cast<int*>(p);
    *q = 50;   
    cout << "ca adress is:\t" << &ca << "\tca is:\t" << ca << endl; 
    cout << "p adress is \t" << p << "\t*p is \t" << *p << endl;
    cout << "q adress is \t" << q << "\t *q is\t" << *q << endl;
    return 0;
}

擴展:

其他三種指針轉(zhuǎn)換運算符:

static_cast <new_type> (expression)
reinterpret_cast <new_type> (expression)
dynamic_cast <new_type> (expression)//以后遇到再說吧,先放到這里作下對比!

到此這篇關(guān)于c++中的const_cast用法大全的文章就介紹到這了,更多相關(guān)c++ const_cast用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容

    C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容

    C語言的關(guān)鍵字共有32個,根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型關(guān)鍵字和其它關(guān)鍵字四類,這篇文章主要給大家介紹了關(guān)于C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C語言實現(xiàn)貪吃蛇游戲(命令行)

    C語言實現(xiàn)貪吃蛇游戲(命令行)

    這篇文章主要為大家詳細介紹了C語言命令行實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼

    C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼

    本文主要介紹了C語言實現(xiàn)內(nèi)存函數(shù)的示例代碼,包括memcpy、memmove、memset和memcmp的使用,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • 利用Qt實現(xiàn)FTP服務(wù)器并支持多客戶端登錄

    利用Qt實現(xiàn)FTP服務(wù)器并支持多客戶端登錄

    這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)FTP服務(wù)器并支持多客戶端登錄,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • VS及Unity安裝和使用Nuget包

    VS及Unity安裝和使用Nuget包

    本文主要介紹了VS及Unity安裝和使用Nuget包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • C語言實現(xiàn)銀行管理系統(tǒng)(文件操作)

    C語言實現(xiàn)銀行管理系統(tǒng)(文件操作)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)銀行管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • OpenCV圖像算法實現(xiàn)圖像切分圖像合并示例

    OpenCV圖像算法實現(xiàn)圖像切分圖像合并示例

    這篇文章主要為大家介紹了python圖像算法OpenCV實現(xiàn)圖像切分圖像合并操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • C++中SetConsoleCursorPosition()移動光標函數(shù)的用法大全

    C++中SetConsoleCursorPosition()移動光標函數(shù)的用法大全

    這篇文章主要介紹了C++中SetConsoleCursorPosition()移動光標函數(shù)的用法大全,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 一文弄懂C語言如何實現(xiàn)單鏈表

    一文弄懂C語言如何實現(xiàn)單鏈表

    單鏈表是由多個結(jié)點鏈接組成,它的每個結(jié)點包含兩個域,一個數(shù)據(jù)域和一個鏈接域(地址域),下面這篇文章主要給大家介紹了關(guān)于C語言如何實現(xiàn)單鏈表的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • QT+Quick實現(xiàn)自定義組件的示例詳解

    QT+Quick實現(xiàn)自定義組件的示例詳解

    這篇文章主要為大家詳細介紹了如何利用QT+Quick實現(xiàn)自定義組件(按鈕、下拉菜單等),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-11-11

最新評論

凌海市| 沐川县| 加查县| 衡山县| 曲水县| 广灵县| 万荣县| 论坛| 行唐县| 阿拉善右旗| 大新县| 元江| 屯门区| 大足县| 广饶县| 龙海市| 玉龙| 霸州市| 柏乡县| 板桥市| 大化| 河西区| 遂川县| 阜新| 扎囊县| 忻城县| 大丰市| 肇庆市| 桂林市| 孟连| 临泉县| 玛曲县| 辽源市| 建始县| 谢通门县| 武宣县| 酉阳| 东山县| 漳浦县| 镇江市| 峡江县|