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

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

關鍵字const的使用總結

2019-11-11 01:32:51
字體:
來源:轉載
供稿:網友

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)。

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇左市| 大新县| 潼南县| 从化市| 嘉义县| 郁南县| 弥渡县| 瑞金市| 连江县| 阳谷县| 大荔县| 晋城| 永宁县| 比如县| 柳州市| 丰台区| 仁化县| 渝北区| 乐都县| 抚远县| 江永县| 白玉县| 大港区| 盐城市| 阜新市| 彭泽县| 兴和县| 铜山县| 兴化市| 张家界市| 莒南县| 白山市| 从江县| 浦东新区| 榆社县| 乡城县| 滨州市| 监利县| 望江县| 龙口市| 石门县|