中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C++常量詳解一(常量指針與常量引用的初始化)

發布時間:2020-10-08 19:55:16 來源:腳本之家 閱讀:164 作者:Jang1996 欄目:編程語言

1、常量

1.1、常量的初始化:
const對象一旦創建后其值就不能再改變,所以const對象必須初始化。這里我們要注意一點,像const int *p和const int &r都并不是const對象。因為const int *p只是表示不能通過p改變p所指的對象的值,p的值是可以變的,所以p可以不用初始化。至于r ,引用本身就不是對象,所以r也并不是const對象,r之所以一定初始化,是因為引用必須初始化。對于以上內容,你也可以理解為底層const 修飾的并不是const對象,還要注意像const int *const p1這種,這是一定要初始化的,這是const對象,因為它有一個頂層const。

1.1.1分清了const對象后,讓我們先把目光聚集到const對象這里。

  const對象可以分為大致三類:

 const int m
 int *const p
 const int *const q

而這前兩類都可以用來給非const對象或者const對象初始化,因為這前兩類都是頂層const,初始化時的拷貝是不會對他們的自身值做出什么改變,即以下代碼均正確。

//第一類
int m1=m;//正確
const int m2=m;//正確
//第二類
int *p1=p;//正確
int *const p2=p;//正確
const int *p3=p;//正確
const int *const p4=p;//正確  

而第三類則需要我們注意一下,因為第三類還有一個底層const。
const int *const q

int *q1=q;//報錯
int *const q2=q;//報錯
const int *q3=q;//正確
const int *const q4=q;//正確

底層const有一個限制:當執行對象的拷貝操作時,拷入和拷出的對象必須具有相同的底層const。
我們可以這樣理解:const int *const q如果可以拷貝初始化給q1、q2,那么意味著我們可以通過q1、q1來改變q所指的對象的值,那這樣q的底層const還有什么意義呢?

以上,是說這三類可以給哪些對象初始化,現在我們看看哪些可以給這三類初始化

第一類const int m

//以下一些變量不初始化,我把重點落在類型。
int m1;
const int m2;
const int m=m1;//正確
const int m=m2;//正確

第二類int *const p

//以下一些變量不初始化,我把重點落在類型。
int *p1;
int *const p2;
const int *p3;
const int *const p4;

int *const p=p1;//正確
int *const p=p2;//正確
int *const p=p3;//錯誤
int *const p=p4;//錯誤

這里的報錯同樣因為底層const有一個限制:當執行對象的拷貝操作時,拷入和拷出的對象必須具有相同的底層const

第三類 const int *const q

//以下一些變量不初始化,我把重點落在類型。
int *q1;
int *const q2;
const int *q3;
const int *const q4;

const int *const q=q1;//正確
const int *const q=q2;//正確
const int *const q=q3;//正確
const int *const q=q4;//正確

1.1.2 現在讓我們把目光轉回非const對象的初始化
這里主要有兩類:

//以下一些變量不初始化,我把重點落在類型。
const int *p;
const int &r;

先考慮他們可以給哪些對象初始化
第一類 const int *p

//以下一些變量不初始化,我把重點落在類型。
int *p1=p;//報錯
int *const p2=p;//報錯
const int *p3=p;//正確
const int *const p4=p;//正確

此處同樣由于低層const的限制

第二類 const int &r

//以下一些變量不初始化,我把重點落在類型。
int &r1=r;//錯誤
const int &r2=r;//正確

這里強調一下,引用不是對象,所以沒有像 int *const &r或者const int *const &r這種形式

好,再考慮哪些可以給他們初始化
第一類 const int *p

//以下一些變量不初始化,我把重點落在類型。
int *p1;
int *const p2;
const int *p3;
const int *const p4;

const int *p=p1;//正確
const int *p=p2;//正確
const int *p=p3;//正確
const int *p=p4;//正確

因為const int *p意義在于表明不可以通過p改變它所指的對象的值,這個對象可以不是常量,只是p所指的對象對于p來說是常量,所以它所指的對象是否const 其實并沒有關系。

第二類 const int &r

//以下一些變量不初始化,我把重點落在類型。
int &r1;
const int &r2;
const int &r=r1;//正確
const int &r=r2;//正確

這里const同樣是指不能通過r改變它所引用的對象,所以它所引用的對象本身是不是const無關緊要。
縱觀以上的錯誤,都是試圖把底層const拷貝初始化給沒有底層const的對象。
以上就是關于涉及到常量的指針和引用的初始化的解釋了。

向AI問一下細節

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

AI

蒙山县| 沙洋县| 大港区| 瑞安市| 沐川县| 明溪县| 九龙坡区| 扶风县| 开江县| 南漳县| 鸡西市| 石景山区| 徐州市| 乌鲁木齐市| 开江县| 隆德县| 胶州市| 凤城市| 章丘市| 云阳县| 太仆寺旗| 洛隆县| 塘沽区| 磐石市| 许昌市| 忻城县| 壤塘县| 四会市| 正安县| 安仁县| 瑞昌市| 黑龙江省| 绥棱县| 苗栗市| 临澧县| 威海市| 霞浦县| 昌黎县| 台北市| 罗山县| 溧水县|