哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++中的const和引用的討論

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 15:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天給大家分享一下這段時(shí)間學(xué)習(xí)c++的總結(jié)學(xué)習(xí):c++里面的const關(guān)鍵字和引用。

一、const關(guān)鍵字的總結(jié)

1、const什么時(shí)候?yàn)橹蛔x變量,什么時(shí)候又是常量呢?

(1)const常量的判別規(guī)則:

只用字面量初始化的const常量才會(huì)進(jìn)入符號(hào)表

使用其它變量初始化的const常量仍然是只讀變量

被volatile修飾的const常量不會(huì)進(jìn)入符號(hào)表

在編譯期間不能直接確定初始值的const標(biāo)識(shí)符,都被作為只讀變量處理

(2)const引用的類(lèi)型與初始化變量的類(lèi)型

相同:初始化變量成為只讀變量

不同:生成一個(gè)新的只讀變量

代碼版本一:

#include <stdio.h>
int main()

const int x = 1;//直接得到值,進(jìn)入符號(hào)表,但是還是會(huì)為 x 分配空間,只不過(guò)這個(gè)空間 x 沒(méi)有用而已
const int& rx = x;//rx代表只讀變量,這個(gè)變量是編譯器為x分配而沒(méi)有使用的空間;引用代表變量的別名,而變量代表一段內(nèi)存空間的別名,所以引用代表一段內(nèi)存空間的別名
int& nrx = const_cast<int&>(rx); //消除 rx只讀屬性,和rx 代表的內(nèi)存空間相同,同時(shí)c++里面的幾種類(lèi)型轉(zhuǎn)換要掌握
nrx=5;
printf("x = %d",x);
printf("rx = %d",rx);
printf("nrx = %d",nrx);
printf("&x = %p",&x);
printf("&rx = %p",&rx);
printf("&nrx = %p",&nrx);

return 0;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# ./a.out
x = 1
rx = 5
nrx = 5
&x = 0x7ffcc5fa8abc
&rx = 0x7ffcc5fa8abc
&nrx = 0x7ffcc5fa8abc

代碼版本二:

#include <stdio.h>
int main()

volatile const int y = 2;// 只讀變量,不會(huì)進(jìn)入符號(hào)表
int *p = const_cast<int*>(&y);//y被 const修飾,取到的地址也有 const 屬性,這里將地址只讀屬性去掉
*p = 8;
printf("y = %d",y);
printf("p = %p",p);
return 0;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffd78559684

代碼版本三:

#include <stdio.h>
int main()

volatile const int y = 2;
int *p = const_cast<int*>(&y);
*p = 8;
printf("y = %d",y);
printf("p = %p",p);
const int z = y ;//只讀變量
p = const_cast<int*>(&z);
*p= 9;
printf("z = %d",z);
printf("p = %p",p);
return 0;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# ./a.out
y = 8
p = 0x7ffc5d651250
z = 9
p = 0x7ffc5d651254

代碼版本四:

#include <stdio.h>
int main()

char c = 'c';
char& rc = c;
const int& trc = c; // char 類(lèi)型默認(rèn)轉(zhuǎn)換為 int;const 引用初始化類(lèi)型不同,將得到新的只讀變量,所以改變 rc 和 trc 沒(méi)有絲毫關(guān)系,從我們的輸出結(jié)果可以看出來(lái)
rc = 'a';
printf("c = %c",c);
printf("rc = %c",rc);
printf("trc = %c",trc);
return 0;

結(jié)果輸出:

root@txp-virtual-machine:/home/txp# ./a.out
c = a
rc = a
trc = c

二、引用的總結(jié):

1、引用與指針有什么關(guān)系,以及如何理解"引用的本質(zhì)就是指針常量"?

(1)指針是一個(gè)常量:

值為一個(gè)內(nèi)存地址,不需要初始化,可以保存不同的地址

通過(guò)指針可以訪問(wèn)對(duì)應(yīng)內(nèi)存地址中的值

指針可以被const修飾成為常量或者只讀變量

(2)引用只是一個(gè)變量的新名字:

對(duì)引用的操作(賦值、取地址等)都會(huì)傳遞到代表的變量上

const引用使其代表的變量具有只讀屬性

引用必須在定義時(shí)初始化,之后無(wú)法代表其它變量

(3)從使用c++語(yǔ)言的角度來(lái)看:

引用與指針沒(méi)有任何的關(guān)系

引用是變量的新名字,操作引用就是操作對(duì)應(yīng)的變量

(4)從c++編譯器的角度來(lái)看:

為了支持新概念"引用"必須要一個(gè)有效的解決方案

在編譯器內(nèi)部,使用指針常量來(lái)實(shí)現(xiàn)"引用"

因此"引用"在定義時(shí)必須初始化

(5)在工程項(xiàng)目開(kāi)發(fā)中:

當(dāng)進(jìn)行c++編程時(shí),直接站在使用的角度來(lái)看待引用,與指針毫無(wú)關(guān)系,引用就是變量的別名

當(dāng)對(duì)C++代碼進(jìn)行調(diào)試分析時(shí),一些特殊情況,可以考慮站在C++編譯器的角度來(lái)看待引用

代碼實(shí)踐:

版本一:

#include <stdio.h>
int a = 2;
struct SV{
int& x;
int& y;
int& z;
};
int main()

int b =4;
int* pc = new int(3) ;
SV sv = {a,b,*pc};
printf("&sv.x = %p",&sv.x);
printf("&sv.y = %p",&sv.y);
printf("&sv.z = %p",&sv.z);
delete pc;
return 0;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# ./a.out
&sv.x = 0x601050
&sv.y = 0x7ffee11ba794
&sv.z = 0x1cfd010

版本二:

#include <stdio.h>
int a = 2;
struct SV{
int& x;
int& y;
int& z;
};
int main()

int b =4;
int* pc = new int(3) ;
SV sv = {a,b,*pc};
int& array[] = {a,b,*pc};//數(shù)組中的每個(gè)元素是引用就不可以;error: declaration of ‘a(chǎn)rray’ as array of references;C++ 天生要支持 C 語(yǔ)言,C 語(yǔ)言中數(shù)組中的每個(gè)元素在內(nèi)存中是順序存放的,地址是遞增的,所以在 C++ 中也要兼容這個(gè)特性,而在 C++ 中唯有引用數(shù)組破快了這個(gè)特性,所以說(shuō) C++ 中不支持引用數(shù)組;&array[1] - &array[0] ?。?Expected ==> 4
printf("&sv.x = %p",&sv.x);
printf("&sv.y = %p",&sv.y);
printf("&sv.z = %p",&sv.z);
delete pc;
return 0;

輸出結(jié)果:

root@txp-virtual-machine:/home/txp# g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:16:14: error: declaration of ‘a(chǎn)rray’ as array of references
int& array[] = {a,b,*pc};

三、總結(jié):

指針是一個(gè)變量

引用是一個(gè)變量的新名字

const引用能夠生成新的只讀變量

在編譯器內(nèi)部使用指針常量實(shí)現(xiàn)"引用"

編譯時(shí)不能直接確定初始值的const標(biāo)識(shí)符都是只讀變量

好了,今天的分享就到這里,如果文章中有錯(cuò)誤或者不理解的地方,可以交流互動(dòng),一起進(jìn)步。我是txp,下期見(jiàn)!

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 可編程邏輯
    +關(guān)注

    關(guān)注

    7

    文章

    528

    瀏覽量

    45457
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2124

    瀏覽量

    77345
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    8813
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C++const 的空間,常量也能占內(nèi)存?

    5g.5jh.dg8sg.cnJIWWQc++語(yǔ)言 c++語(yǔ)言5g.Zq2.dg8sg.cnJIWWQc++語(yǔ)言 def lock_tetromino(self): \"\"\"將落地的方塊鎖定到網(wǎng)格
    發(fā)表于 04-16 19:19

    keil實(shí)現(xiàn)cc++混合編程

    起因項(xiàng)目中使用到一個(gè)開(kāi)源的模擬IIC的庫(kù),封裝的比較好,但是是使用c++寫(xiě)的。于是將其移植到自己的項(xiàng)目中,主要有以下三步操作: 在工程選項(xiàng) C/C++中去掉勾選
    發(fā)表于 01-26 08:58

    C語(yǔ)言與C++的區(qū)別及聯(lián)系

    缺點(diǎn):性能比面向過(guò)程低。 二、具體語(yǔ)言上的區(qū)別 1、關(guān)鍵字的不同 C語(yǔ)言有32個(gè)關(guān)鍵字;C++有63個(gè)關(guān)鍵字。 2、后綴名不同 C源文件后綴.c,
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    1、語(yǔ)法兼容性: C++完全兼容C語(yǔ)言的語(yǔ)法,這意味著任何有效的C語(yǔ)言程序都可以直接在C++編譯器下編譯通過(guò)。 2、底層控制: C++
    發(fā)表于 12-11 06:51

    C語(yǔ)言和C++之間的區(qū)別是什么

    C++的標(biāo)準(zhǔn)庫(kù)那樣集成度高和功能齊全。 6、編譯器與語(yǔ)言特性: C++編譯器通常比C語(yǔ)言編譯器更加復(fù)雜,因?yàn)樗枰幚砀嗟恼Z(yǔ)言特性,比如模板元編程、命名空間、引用等。
    發(fā)表于 12-11 06:23

    C/C++條件編譯

    條件編譯是一種在編譯時(shí)根據(jù)條件選擇性地包含或排除部分代碼的處理方法。在 C/C++ ,條件編譯使用預(yù)處理指令 #ifdef、#endif、#else 和 #elif 來(lái)實(shí)現(xiàn)。常用的條件編譯指令有
    發(fā)表于 12-05 06:21

    C++程序異常的處理機(jī)制

    1、什么是異常處理? 有經(jīng)驗(yàn)的朋友應(yīng)該知道,在正常的CC++編程過(guò)程難免會(huì)碰到程序不按照原本設(shè)計(jì)運(yùn)行的情況。 最常見(jiàn)的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開(kāi)相應(yīng)文件失敗等等。 一個(gè)程序
    發(fā)表于 12-02 07:12

    嵌入式C/C++回歸測(cè)試四大最佳實(shí)踐(附自動(dòng)化測(cè)試工具TESSY使用教程)

    嵌入式開(kāi)發(fā),一次微小的代碼改動(dòng)都可能引發(fā)“蝴蝶效應(yīng)”,如何守護(hù)系統(tǒng)的穩(wěn)?。客扑]專(zhuān)業(yè)的自動(dòng)化測(cè)試工具#TESSY,源自戴姆勒-奔馳,是嵌入式C/C++單元/集成測(cè)試的標(biāo)桿。
    的頭像 發(fā)表于 10-31 14:21 ?534次閱讀
    嵌入式<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>回歸測(cè)試四大最佳實(shí)踐(附自動(dòng)化測(cè)試工具TESSY使用教程)

    C/C++代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

    ?Perforce Validate??QAC?項(xiàng)目的相對(duì)/根路徑的支持。C++?分析也得到了增強(qiáng),增加了用于檢測(cè) C++?并發(fā)問(wèn)題的新檢查,并改進(jìn)了實(shí)體名稱(chēng)和實(shí)
    的頭像 發(fā)表于 10-13 18:11 ?705次閱讀
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代碼靜態(tài)測(cè)試工具Perforce QAC 2025.3的新特性

    dfs_v1,vnode引用計(jì)數(shù)只增不減,無(wú)法釋放怎么解決?

    對(duì)vnode引用計(jì)數(shù)減一,計(jì)數(shù)減一的代碼在dfs_posix.c的close()函數(shù)里,代碼如下: int close(int fd) { int result; struct dfs_file *d
    發(fā)表于 09-11 08:00

    技能+1!如何在樹(shù)莓派上使用C++控制GPIO?

    和PiGPIO等庫(kù),C++可用于編程控制樹(shù)莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對(duì)速度和精度要求較高的硬件項(xiàng)目。在樹(shù)莓派社區(qū),關(guān)于“Python
    的頭像 發(fā)表于 08-06 15:33 ?4447次閱讀
    技能+1!如何在樹(shù)莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    Python是樹(shù)莓派上的首選編程語(yǔ)言,我們的大部分教程都使用它。然而,C++在物聯(lián)網(wǎng)項(xiàng)目中同樣廣受歡迎且功能強(qiáng)大。那么,在樹(shù)莓派項(xiàng)目中選擇哪種語(yǔ)言更合適呢?Python因其簡(jiǎn)潔性、豐富的庫(kù)和資源而被
    的頭像 發(fā)表于 07-24 15:32 ?1087次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹(shù)莓派上哪種語(yǔ)言更優(yōu)?

    請(qǐng)問(wèn)如何在C++中使用NPU上的模型緩存?

    無(wú)法確定如何在 C++ 的 NPU 上使用模型緩存
    發(fā)表于 06-24 07:25

    在OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)的內(nèi)存泄漏怎么解決?

    在 OpenVINO? C++代碼啟用 AddressSanitizer 時(shí)遇到內(nèi)存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    發(fā)表于 06-23 07:16

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的256kRAM
    的頭像 發(fā)表于 05-21 10:33 ?1181次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?
    和林格尔县| 沐川县| 手游| 遂平县| 赤壁市| 安庆市| 汾阳市| 大理市| 阜阳市| 克拉玛依市| 屏山县| 兰溪市| 博乐市| 成武县| 葵青区| 望江县| 亚东县| 华安县| 锦屏县| 阿城市| 保靖县| 方山县| 禹城市| 达孜县| 额济纳旗| 伊宁市| 汾阳市| 内黄县| 海原县| 玉环县| 浏阳市| 新津县| 固安县| 德安县| 佛山市| 玉溪市| 本溪| 通辽市| 繁昌县| 辰溪县| 贞丰县|