日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【C++自我精讲】基础系列二 const

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++自我精讲】基础系列二 const 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【C++自我精講】基礎系列二 const

0 前言

分三部分:const用法、const和#define比較、const作用。

1 const用法

const常量:const可以用來定義常量,不可改變,const常量在定義時必須初始化(extern修飾時是特例)。

//const常量
const int Number = 100;
extern const int Number; 

?const指針:

? 1)const出現在*號左邊,表示被指物是常量(不可以改變);注意:const寫在類型之前和寫在類型之后且*號之前是一樣的。

? 2)const出現在*號右邊,表示指針自身是常量(不可以改變);

? 3)const出現在*號兩邊,表示被指物和指針兩者都是常量(不可以改變)。

//const指針
char name[] = "joinclear";
char* pName = name;             //指針和所指物都可以改變
const char* pName = name;       //指針可以改變,指針所指物不可以改變
char const* pName = name;       //同上
char* const pName = name;       //指針不可以改變,指針所指物可以改變
const char* const pName = name; //指針和所指物都不可以改變

?const引用:初始化右值一般只是個常量,所以只有常量引用可以有初始化右值。

//const引用
int i = 100;
int &j = i;    //引用
int &j = 200;  //錯誤,引用不能改變右值
const int &k = 200;  //const引用可以改變右值

const函數形參:const只能修飾輸入參數,不能修飾輸出參數。

? 1)對于內部數據類型的輸入參數,沒必要將“值傳遞”方式改為“const引用傳遞”,因為“值傳遞”是,函數會自動產生臨時變量用于復制該參數,無需const。

void Fun(int i)       //OK
void Fun(const int i) //沒必要

? 2)當輸入參數是“指針傳遞”是,為了防止函數體內改變此指針指向的值,可以加const修飾。

void StringCopy(const char *strSource); //strSource不能改變

? 3)對于非內部數據類型的輸入參數,應將“值傳遞”方式改為“const引用傳遞“。

void Func(CTest a);        //函數體內會產生CTest的臨時對象用于復制a,臨時對象又會經過構造、復制、析構,很耗時
void Func(CTest &a);       //引用,不產生臨時對象,但"引用傳遞"有可能改變a
void Func(const CTest &a); //加const不會改變a

const函數返回值:const修飾函數返回值。

? 1)返回值是“值傳遞”方式,不用加const修飾。因為函數會把返回值復制到外部臨時的存儲單元,加const修飾沒必要。

int Fun(int i)        //OK
const int Fun(int i)  //沒必要

? 2)返回值是“指針傳遞”方式,可以加const修飾。意思為函數返回值指針所指內容不能改變,此時此返回值也只能賦給const修飾的同類型指針。

const char * GetString(void);
const char *str = GetString();

const類成員變量:只在某個對象生存期內是常量,對于整個類是可變的,因為類可以創建多個對象,不同的對象其const類成員變量的值是可以不同。

? 1)const類成員變量,不能在類聲明中初始化。

class A
{const int size = 100;  //錯誤
};

? 2)const類成員變量,只能在類構造函數的初始化表中進行初始化。

class A
{A(int size);     const int size ; 
};
A::A(int i) : size(i) //構造函數初始化列表
{...
}

const類成員函數:當類成員函數,不會修改數據成員時應該聲明為const成員函數。

class A
{
public:int GetNum() const; //const成員函數
private:int num_;
};int A::GetNum() const
{num_ = 100;; // 錯誤,num_不能改變return num_;
}

2 const和#define比較

? 1)const常量有數據類型,編譯器可以對前者進行類型安全檢查;而#define常量沒有數據類型,編譯器只進行字符替換,沒有類型安全檢查,并且在字符替換可能會產生意料不到的錯誤(邊際效應)。

? 2)const可定義局部變量,作用域僅限于函數體內;#define常量,即使在函數體內,作用域也是全局的,為從定義處到文件結束,除非用#undef取消定義。

3 const作用

? 1)定義const常量,不可改變,能夠節省內存空間,代替#define。

? 2)編譯器能進行類型安全性檢查,消除部分隱患。

? 3)可以保護被修飾的內容,防止意外修改,能夠增強程序的健壯性。

? 4)能夠提高效率,安全。

轉載于:https://www.cnblogs.com/snake-hand/p/3180352.html

總結

以上是生活随笔為你收集整理的【C++自我精讲】基础系列二 const的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91精品影视 | 九九免费视频 | 婷婷激情影院 | 少妇一级淫片免费放 | 免费av在线网站 | 国产又粗又猛又爽又黄的视频小说 | 99成人精品| 成年人在线免费观看 | 草草视频在线 | 麻豆传媒在线 | 亚洲欧美激情在线观看 | 欧美黄色a| 亚洲一卡二卡三卡四卡 | 午夜神马福利 | 日韩偷拍一区 | 亚洲 国产 欧美 日韩 | 麻豆久久久午夜一区二区 | 在线观看波多野结衣 | 黄av在线播放 | 亚洲第一页乱 | 黑人巨大猛烈捣出白浆 | 无码精品一区二区三区在线 | 国产婷婷一区二区三区 | mm1313亚洲国产精品无码试看 | 老妇女玩小男生毛片 | 青青青青青操 | 日本在线观看视频网站 | av在线第一页| sm一区二区三区 | 久久久999国产精品 天堂av中文在线 | 久久午夜影院 | av中文字幕一区二区 | 免费的av网站 | 黄色国产免费 | 美女扒开腿让男生捅 | 国产精品成人3p一区二区三区 | 成人网战 | 不卡免费视频 | 免费看黄在线 | 重口变态虐黄网站 | 69网址| 免费久久精品视频 | 成人影视免费 | 97精品国产97久久久久久免费 | 在线观看第一页 | 风韵多水的老熟妇 | 国产成人精品一区二区三区视频 | 国产三级在线观看完整版 | ,亚洲人成毛片在线播放 | 欧美三个黑人玩3p | 成人综合在线观看 | 99草视频 | 久久久久人妻一区二区三区 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 国产婷婷色综合av蜜臀av | 成人人人人人欧美片做爰 | 国产久视频 | 国产黑丝在线播放 | 中文精品一区二区三区 | 国产精品免费一区二区区 | 亚洲一区免费 | 久久久久久成人精品 | 色偷偷欧美 | 在线视频污 | 最新中文字幕在线 | 亚洲另类一区二区 | 国产丝袜美女 | 人妻丰满熟妇av无码区hd | 午夜激情男女 | 美女av网站| 亚洲国产成人精品女人久久 | 97午夜| 青青草色视频 | 精品一区二区电影 | 一本久道视频一本久道 | 全黄一级播放 | 日批视频免费观看 | 日韩中文字幕视频在线 | 男女视频免费 | 妖精视频一区二区三区 | 国产精品丝袜视频无码一区69 | 亚洲欧美日韩精品在线观看 | 欧美日韩一区二区综合 | 欧美成人手机在线视频 | 人人爽人人香蕉 | 国产女人精品视频 | 午夜看看 | 精品久久久中文字幕 | 黄床大片 | 亚洲精品无码永久在线观看 | 国产成人短视频 | 就爱操av| 成人黄色电影在线 | www.亚洲免费| 亚洲熟妇av日韩熟妇在线 | 国产精品亲子伦对白 | 日本人xxxⅹ18hd19hd| 性色av网 | 97香蕉久久超级碰碰高清版 |