国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關鍵字const的使用總結

2019-11-11 02:49:40
字體:
來源:轉載
供稿:網友

1. const是一種類型修飾符,用于說明永不改變的對象,const對象一旦定義就無法再改變,所以const對象必須初始化。

 

2.頂層const與底層const區別

位于*左側為底層const,位于*右側為頂層const

頂層const意味著內存本身存儲的數據是常量,

如int const a = 3;

即變量a是常量,不可改變。a = 5;//error

 

如int const *pa = &a;

即pa所指向內存a中數據為常量,不可改變

*pa = 5; // error

但是可以改變指針的指向

int b = 5; pa = &b; // ok

 

底層const意味著指針指向的內存中存儲的數據為常量,不可改變,

如 int a = 3; 

int *const pa = &a;

即內存a中存儲數據為常量,不可改變

int b = 5; pa = &b; // error

但是可以改變指針指向內存中數據

*pa = 5; // ok

 

注:底層const使用的前提是存在指針,針對的指針所指向內存的數據。

 

3.盡可能使用const,enum,inline替換#define

       宏:未經過C++的類型檢測機制,是存在安全隱患的。

如果打算使用#define PI 3.14 ,請使用double const PI = 3.14

 

如果打算使用#define RED              RGB(0XFF,0X00,0X00)

                     #defineGREEN RGB(0X00,0XFF,0X00)

                     #defineBLUE             RGB(0X00,0X00,0XFF)

請使用enum COLOR

{

RED = RGB(0XFF,0X00,0X00),

GREEN = RGB(0X00,0XFF,0X00),

BLUE = RGB(0X00,0X00,0XFF)

};

 

如果打算使用#define squr(a)   a*a

請使用 double sque(doubleconst a) const { return a * a; }

 

如果打算書寫函數

double sque(double const a) const { returna * a; }

double sque(double const a) { return a * a;}

請停止,完全可以使用一個函數double sque(double const a)const { return a * a; }

完成兩個函數的功能,達到減少代碼冗余的目的。

兩個函數可以構成重載函數的關系,const對象只能調用const函數,非const函數同樣可以調用const函數。

 

const具有安全性檢測與數據保護功能,請盡量使用const關鍵字修飾變量,對象,引用,指針,函數。

 

5.防止const返回可以改變對象的行為

如下代碼

struct CPoint

{

       inta;

       intb;

};

class Rectangle

{

public:

       CPoint& Get() const { return point;}

PRivate:

       CPointpoint;

};

通過返回CPoint& 完全可以改變內部對象的狀態。即返回內部對象的引用即相當于公開的內部對象,效果同public,破壞的封裝。同const函數的作用完全違背。請避免變樣使用。請使用下面的方法:

CPoint Get() const { return point;}

const CPoint& Get() const {returnpoint;}

 

6.mutable與valatile的使用

       說了const就不得不提mutable與volatile。

       const對象的值不能被改變,但是mutable成員的值卻可以被修改

struct CPoint

{

       inta;

       mutableint b;

};

void change_point(CPoint const point) const

{

       ++point.a;     // error

       ++point.b;     // ok

}

代碼中編譯器經常對內存進行優化,volatile表示變量是易變的,表示可以被某些編譯器未知的因素更改。尤其高并發時期。此時可使用volatile int a; 告訴優化器不要優化這個變量,請時時從內存中讀取。

個人總結,僅供參考,如果有什么忽略的或者好的意見,請大家不吝賜教。

(ps :個人郵箱:wangqing10520@sina.com)。

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岐山县| 沅陵县| 文化| 板桥市| 博湖县| 波密县| 长阳| 杭锦旗| 五原县| 家居| 安顺市| 江口县| 蒲城县| 光泽县| 南昌市| 深州市| 天祝| 遂昌县| 威宁| 略阳县| 宝丰县| 大理市| 建湖县| 衡山县| 会同县| 肥城市| 沙雅县| 城市| 嘉义市| 南召县| 泽库县| 婺源县| 夏邑县| 寿光市| 务川| 昔阳县| 永吉县| 林西县| 茌平县| 丹寨县| 岑溪市|