const關鍵字在c++中的用法很普遍,總結了一下,大致有這些用法。
1.阻止乙個變數被改變,使用const修飾,變數成為常量,因為以後不能修改它,所以定義時必須初始化。比如const int number = 512。這和c語言中巨集有點類似,都是定義常量的,但是它們也有不同之處:巨集只是做簡單的字元替換,在預處理階段就被替換了,沒有資料型別也不做型別檢查,並且不會占用儲存空間;const是在編譯執行時使用,有資料型別,在編譯期間做型別檢查,並且會被分配儲存空間。在c++程式中,應該使用const代替#define。
2.用來修飾指標:①指向const物件的指標( 常量指標)比如const int *p;我們從右往左理解,p是乙個指標變數,它儲存是的是int型別的常量物件,說明指標p是可變的,它指向的物件不可變;②const指標(指標常量)比如int num = 0; int *const p = #還是一樣,從右往左理解,p是乙個const型別的指標,它指向的是乙個int型別的物件,說明指標p不可變,它指向的物件是可變的;③指向const物件的const指標 比如const double pi = 3.1415; const double *p = π 說明指標p是不可變的,它指向的物件也是不可變的。
3.用來修飾函式形參和返回值。①const修飾形參,表明它是乙個輸入引數,在函式內部不容許改變它的值。ps:對於輸入引數的指標形參應該盡量被宣告為const,呼叫的時候可以傳遞指向const物件的指標也可以傳遞指向非const物件的指標。如下面的**:
#include using namespace std;
void test_const(const double*);
int main()
void test_const(const double *d_ptr)
輸出結果:
結果表明使用指標形參時用const修飾(輸入引數)能力要強一些,而且還能防止意外的改變該指標指向的記憶體單元。使用引用傳遞時(輸入引數),應該使用const修飾,不產生臨時物件,可以提高效率,當然使用const修飾後既可以接受const物件也可以接受非const物件。
②const修飾返回值。使其返回值不能為左值。看下面的**說明
#include using namespace std;
const int& test_const_return(int&, int);
int main()
const int& test_const_return(int &i, int j)
4.const修飾成員函式。任何不會修改類中資料成員變數的成員函式都應該宣告為const型別。也就是說const成員函式中是不能改變成員變數的值,那我們確實需要改變怎麼辦呢,c++中有個不常用的關鍵字mutable就可以幫我們實現,表明此資料成員變數是可變的。而且const成員函式不能呼叫非const成員函式。看看下面的**#include using namespace std;
class a ;
int a::get_count() const
看看編譯結果:
從上面可以看出雖然const只是c++語法中的乙個關鍵字,但是它的作用之廣用處之大已經很明了,要想寫出健壯高效的c++**,const是必不可少的,對於const需要掌握。
上面出現了乙個詞叫左值,這在c++中很常見,簡單解釋一下。左值可以出現在賦值語句的左邊或者右邊,也就說左值其實是可以作為右值使用的。而右值是只能出現的賦值的右邊。列舉了幾個簡單的例子:
#include using namespace std;
int main()
C 中const用法總結
c 中用法總結 1.1.1.定義普通常量 使用 define來定義常量也是常用方法,但const也可以用來定義常量,在 effective c 中建議使用const代替 define來定義常量,因為const定義的常量具有型別資訊,而巨集沒有,所以使用const定義的常量在進行賦值操作時編譯器會進行...
C 中const用法總結
1.const 常量,如 const int max 100 優點 const 常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查,而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換時可能會產生意料不到的錯誤。2.const 修飾類的資料成員。const 資料成員只在某個...
c 中const用法總結
const關鍵字在c 中的用法很普遍,總結了一下,大致有這些用法。1.阻止乙個變數被改變,使用const修飾,變數成為常量,因為以後不能修改它,所以定義時必須初始化。比如const int number 512。這和c語言中巨集有點類似,都是定義常量的,但是它們也有不同之處 巨集只是做簡單的字元替換...