const 小知識

 

 

 

http://www.cnblogs.com/wanghao111/archive/2009/09/25/1574154.html

 

1.常量: 通過const關鍵字將一個變量定義爲常量。

const int bufsize=1024;

如果在程序中試圖修改bufsize的值,則會引起一個錯誤。

由於const類型的量一經定義就不能改變它的值,因此在定義時必須初始化。

const double PI; //這條語句將產生錯誤

2.指向const類型對象的指針 const int *p;

p是一個指向int類型對象的指針,但p本身並不是一個常量

。也就是說p可以指向任何一個int類型的對象,但由p所指向的對象不可以通過p來改變值。

3.對象常量

<類名> const <對象名>

或者 const <類名> <對象名>

定義常對象時,同樣要進行初始化,並且該對象不能再被更新

。 4. 常指針

a)<類型> * const <對象>

表示定義一個常量指針,對象本身不能改變,但所指向的值是可以改變的。

b)const <類型> * <對象>

表示定義一個常量的指針或指針常量,該變量的本身可以改變,但所指向的值是不能改變的。

5.常引用

const <類型> &<對象>

使用const修飾符也可以說明引用,被說明的引用爲常引用,該引用所引用的對象不能被更新。

如: const double &v;//v是一個引用

v=12.3 //非法,不能更新

6.常成員函數

使用const關鍵字進行說明的成員函數,稱爲常成員函數。

只有常成員函數纔有資格操作常量或常對象。

沒使用const說明的成員函數不能用來操作常對象。

常成員函數說明格式如下:

<返回類型說明符> <函數名> (<參數列表>) const;

其中,const是加在函數說明後的類型修飾符,它是函數類型的一個組成部分,因此在函數實現部分也要代關鍵字const。

#include <iostream>

using namespace std;

class sample

{

private: int x,y;

public: sample(int i,int j)

{

x=i;

y=j;

}

void disp() //成員函數,別名爲disp1

{

cout << "disp1:x=" << x << ",y=" << y << endl;

}

void disp() const//常成員函數,別名爲disp2

{

cout << "disp2:x=" << x << ",y=" << y << endl;

}

};

void main()

{

sample a(1,2);

a.disp(); //調用成員函數disp(disp1)

const sample b(3,4);

b.disp(); //調用常成員函數disp(disp2)

}

這裏disp()成員函數是重載的,一個是普通的,一個是常成員函數。

常對象自動調用常成員函數。 const是用於保護程序的健壯性,減少程序隱患。

const的用法比較複雜,總結起來又分爲以下兩種:

1:在定義變量時使用:

a: const int a=100;

最簡單的用法,說明變量a是一個常變量;

b: int const b=100;

與a功能相同;

c: const int *a=&b;

指向常數的指針,即指針本身的值是可以改變的,但指向的內容是不能改變的;

d: int const *a=&b;

與c功能相同;

e: int * const a = &b;

常指針,即指針本身的值是不可改變的,但指向的內容是可改變的;

f: const int * const a = &b;

指向常數的常指針,即指針本身與指向的內容都是不可改變的;

g: const int &a=100;

常數引用,即不能改變引用的值;

總結: 在使用const定義變量時,一定要進行初始化操作,在操作符(*,&)左邊的修飾的是指向的內容,在右邊的是本身。

2:在函數用使用:

a: void func(const int a);

做爲參數使用,說明函數體內是不能修改該參數的;

對不參數定義時不同的形式,可參見定義變量時使用方式;

b: const int func();

做爲返回值使用,說明函數的返回值是不能被修改的,在取得返回值時應用const int a = func();

對不 參數定義時不同的形式,可參見定義變量時使用方式;

c: int func() const;

常函數,說明函數是不能修改類中成員的值的,只能用於類的成員函數中;

總結:在函數中使用const,情況與定義變量的情況大致相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章