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

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

const 的作用?

2019-11-09 17:44:06
字體:
來源:轉載
供稿:網友

我只要一聽到被面試者說:”const意味著常數”(不是常數,可以是變量,只是你不能修改它),我就知道我正在和一個業余者打交道。去年Dan Saks已經在他的文章里完全概括了const的所有用法,因此ESP(譯者:Embedded Systems PRogramming)的每一位讀者應該非常熟悉const能做什么和不能做什么.如果你從沒有讀到那篇文章,只要能說出const意味著”只讀”就可以了。盡管這個答案不是完全的答案,但我接受它作為一個正確的答案。(如果你想知道更詳細的答案,仔細讀一下Saks的文章吧。) 如果應試者能正確回答這個問題,我將問他一個附加的問題:下面的聲明都是什么意思? Const只是一個修飾符,不管怎么樣a仍然是一個int型的變量 const int a; int const a; const int *a; int * const a; int const * a const; 本質:const在誰后面誰就不可修改,const在最前面則將其后移一位即可,二者等效

前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,指向的整型數是不可修改的,但指針可以,此最常見于函數的參數,當你只引用傳進來指針所指向的值時應該加上const修飾符,程序中修改編譯就不通過,可以減少程序的bug)。

第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。

如果應試者能正確回答這些問題,那么他就給我留下了一個好印象。順帶提一句,也許你可能會問,即使不用關鍵字 ,也還是能很容易寫出功能正確的程序,那么我為什么還要如此看重關鍵字const呢?我也如下的幾下理由: 1) 關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其 它人留下的垃圾,你就會很快學會感謝這點多余的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。) 2) 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。 3) 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。

const關鍵字至少有下列n個作用: (1)欲阻止一個變量被改變,可以使用const關鍵字。在定義該const變量時,通常需要對它進行初始化,因為以后就沒有機會再去改變它了; (2)對指針來說,可以指定指針本身為const,也可以指定指針所指的數據為const,或二者同時指定為const; (3)在一個函數聲明中,const可以修飾形參,表明它是一個輸入參數,在函數內部不能改變其值; (4)對于類的成員函數,若指定其為const類型,則表明其是一個常函數,不能修改類的成員變量; (5)對于類的成員函數,有時候必須指定其返回值為const類型,以使得其返回值不為“左值”。例如:

const classA Operator*(const classA& a1,const classA& a2);   operator*的返回結果必須是一個const對象。如果不是,這樣的變態代碼也不會編譯出錯: classA a, b, c; (a * b) = c; // 對a*b的結果賦值   操作(a * b) = c顯然不符合編程者的初衷,也沒有任何意義。

以下面的例子進行進一步的講解

include

include

using namespace std;

int main () { string st; const char *pc=”xxx”; pc=”yyy”; st=pc; cout<

這里是const char *p;他的意思是p指向的目標空間的內容不可變化. 例如定義char c=’A’; p=&c;則c的內容不可以變化.如c=’B’;等一些企圖改變變量c的值的做法都不行.

然而p仍然是動態的,就是它還可以指向別的空間,被賦予新的地址值,只是被他指向的目標空間的內容不可變化,如上面的c值始終為’A’,不可以更新,而一但p指向別處,則c就更新了.

問題補充中的變化實質上是p的值的變化,這是允許的.因為字符串出現在表達式中時它的值是它的首字母的地址,所以”xxx”和”yyy”都是地址值. 而若企圖改變*p的值則是非法,例如問題補充中,企圖修改”yyy”中第1個y所在位置的值則被認為是非法的.

最后我想說const char p;與char const p;的區別,他們恰好相反,后者是表明指針p的值不可變,但它指向目標的值可變. 例如char * const p; char c=’A’,m; p=&c;執行后,c=’B’可以執行,但p=&m則被認為是非法.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桦南县| 云林县| 泸水县| 彝良县| 美姑县| 西乌| 获嘉县| 永州市| 禄丰县| 文山县| 芦溪县| 色达县| 瑞安市| 蚌埠市| 丽水市| 定兴县| 甘德县| 邵阳县| 玉门市| 扎鲁特旗| 瑞金市| 错那县| 沧州市| 汝城县| 三台县| 柯坪县| 金华市| 噶尔县| 四川省| 临西县| 临夏县| 兴海县| 镇康县| 广安市| 临武县| 连南| 华宁县| 舟曲县| 怀安县| 阿拉尔市| 博罗县|