3 回答

TA貢獻1784條經驗 獲得超9個贊
C++在函數聲明時,后面跟個const是限定函數類型為常成員函數, 常成員函數是指不能改變成員變量值的函數。
例如“double d() const;”,其中的其中的“const”限定了d()函數中不能有任何改變其所屬對象成員變量值的功能,如果有則會在編譯階段就報錯。
它的主要作用就是能使成員函數的意義更加清楚,我們可在不改變對象的成員函數的函數原型中加上const說明。在需要增加可讀性和減少邏輯出錯的情況下,就可以用這種形式。
擴展資料:
簡單介紹
一、const與define。兩者都可以用來定義常量,但是const定義時,定義了常量的類型,所以更精確一些。#define只是簡單的文本替換,除了可以定義常量外,還可以用來定義一些簡單的函數,有點類似內聯(lián)函數(Inline)。const和define定義的常量可以放在頭文件里面。(小注:可以多次聲明,但只能定義一次)
二、》》const與指針和引用。
1、const與指針。
先來看看下面的幾種定義:
int me;
const int* p1 = &me;//p1可變,*p1不可變,此時不能用*p1來修改,但是p1可以轉向
int* const p2 = &me;//p2不可變,*p2可變,此時允許*p2來修改其值,但是p2不能轉向。
const int* const p3 = &me;//p3不可變,*p3也不可變,此時不能用*p3來修改其值。
2、指針和引用的區(qū)別很簡單,就是引用更簡潔,更安全。因為引用聲明時必須初始化。 引用更接近const指針,一旦與某個變量關聯(lián),就將一直效忠于他。
3、const指針可以接受const和非const地址,但是非const指針只能接受非const地址。所以const指針的能力更強一些,所以盡量多用const指針,這是一種習慣。

TA貢獻1995條經驗 獲得超2個贊
const是一個C語言(ANSI C)的關鍵字,具有著舉足輕重的地位。它限定一個變量不允許被改變,產生靜態(tài)作用。
使用const在一定程度上可以提高程序的安全性和可靠性。另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一定幫助。另外CONST在其它編程語言中也有出現(xiàn),例如Pascal、C++、PHP5、B#.net、HC08 C、C#等。
const的作用:
1、可以定義const常量,具有不可變性。
例如:const int Max=100; Max++會產生錯誤;
2、便于進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。
例如: void f(const int i) { .........} 編譯器就會知道i是一個常量,不允許修改;
3、可以避免意義模糊的數字出現(xiàn),同樣可以很方便地進行參數的調整和修改。 同宏定義一樣,可以做到不變則已,一變都變!
如1中,如果想修改Max的內容,只需要它修改成:const int Max=you want;即可!
4、可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。 還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
例如: void f(const int i) { i=10;//error! }
5、可以節(jié)省空間,避免不必要的內存分配。
例如:
#define PI 3.14159 //常量宏
const double Pi=3.14159; //此時并未將Pi放入ROM中 ......
6、提高了效率。
編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。
擴展資料:
const 的時候都會混淆它與 define 的區(qū)別。從功能上說它們確實很像,但它們又有明顯的不同:
1、define是預編譯指令,而const是普通變量的定義。define定義的宏是在預處理階段展開的,而const定義的只讀變量是在編譯運行階段使用的。
2、const定義的是變量,而define定義的是常量。define定義的宏在編譯后就不存在了,它不占用內存,因為它不是變量,系統(tǒng)只會給變量分配內存。
但const定義的常變量本質上仍然是一個變量,具有變量的基本屬性,有類型、占用存儲單元??梢哉f,常變量是有名字的不變量,而常量是沒有名字的。
有名字就便于在程序中被引用,所以從使用的角度看,除了不能作為數組的長度,用const定義的常變量具有宏的優(yōu)點,而且使用更方便。所以編程時在使用const和define都可以的情況下盡量使用常變量來取代宏。
3、const定義的是變量,而宏定義的是常量,所以const定義的對象有數據類型,而宏定義的對象沒有數據類型。所以編譯器可以對前者進行類型安全檢查,而對后者只是機械地進行字符替換,沒有類型安全檢查。這樣就很容易出問題,即“邊際問題”或者說是“括號問題”。

TA貢獻2051條經驗 獲得超10個贊
const Stock land =Stock("hyd");
land.show();
land 是常量,但是類成員函數 show 無法保證不修改 land,所以編譯器將拒絕執(zhí)行該段代碼。除非你能保證 show 像 const 函數一樣,但這需要另外一種語法,即:
void show() const; (聲明)
void Stock::show() const {}; (定義)
const 的用法在 C++ 里是很有講究的 參考一下 《Effective C++》吧
以下摘自其中條款三
const 成員函數
將const 實施于成員函數的目的,是為了確認該成員函數可作用于const 對象身上。這一類成員函數之所以重要,基于兩個理由。
第一,它們使 class 接口比較容易被理解。這是因為,得知哪個函數可以改動對象內容而哪個函數不行,很是重要。
第二,它們使"操作 const 對象"成為可能。這對編寫高效代碼是個關鍵,因為如條款 20 所言,改善 C++ 程序效率的一個根本辦法是以 pass by reference-to-const 方式傳遞對象,而此技術可行的前提是,我們有 const 成員函數可用來處理取得(并經修飾而成)的 const 對象。
簡而言之 const 在這里是修飾 函數 的
- 3 回答
- 0 關注
- 1512 瀏覽
添加回答
舉報