2.const應用到函式中
3. 類中定義常量(const特殊用法)
4.const定義常量物件,以及常量物件的用法
const名叫常量限定符,用來限定特定變數,以通知編譯器該變數是不可修改的。習慣性的使用const,可以避免在函式中對某些不應修改的變數造成可能的改動。
c++中const的主要用法大致上可以分為以下幾類:
主要是修飾值變數、reference、pointer
比如:
const
int a =10;
const
int arr[3]
=;
對於類似這些基本資料型別,修飾符const可以用在型別說明符前,也可以用在型別說明符後,其結果是一樣的。在使用這些常量的時候,只要不改變這些常量的值便好。
const修飾指標(*)
這裡有一些實際的示例:
int x=
100;
const
int* a1 =
&x;//[1]
intconst
* a2 =
&x;//[2]
int*
const a3 =
&x;//[3]
const
int*
const a =
&x;//[4]
《effective c++》item21上的總結非常直觀明了。
根據這條規律,[1]和[2]兩條中,const位於星號的左側,所以const含義是修飾變數a1和a2指標指向的內容是常量,也就是不能做 *a1 = 1或則 *a12 = 1這種類似操作,編譯器會報錯。
[3]為指標本身是常量,而指標所指向的內容不是常量,這種情況下不能對指標本身進行更改操作,如a++是錯誤的.
[4]為指標本身和指向的內容均為常量。
const修飾reference(&)
同樣給出一些示例:
int x =
100;
intconst
&a=x;
//[1]
const
int&a=x;
//[2]
int&
const a=x;
//[3]這種方式定義是c、c++編譯器未定義,雖然不會報錯,但是該句效果和int &a一樣。
對於[1]和[2]這兩種定義方式是等價的,此時的引用a的值不能被更新。如:a++ 或則給a賦值這是錯誤的。
const在函式中的應用主要有三點:
不管是作為函式引數的const修飾符還是返回值的修飾符,其實際含義都是一樣的。
const修飾函式引數
比如:void fun0(const a* a ); 或則 void fun1(const a& a);
呼叫函式的時候用相應的變數初始化const常量,則在函式體中,按照const修飾的部分進行常量化。
比如const a* a 則不能對傳遞進來的指標指向的內容修改,保護原指標所指向的內容;
比如const a& a則不能對傳遞進來的引用物件的內容修改,保護原引用物件所的內容。
注意:引數const通常用於引數為指標或引用的情況。
const修飾函式返回值
修飾返回值的const,如const a fun2( ); const a* fun3( );
這樣宣告了返回值後,const按照"修飾原則"進行修飾,保護函式返回的指標指向的內容或則引用的物件不被修改。
const修飾函式
const作用於函式還有一種情況是,在函式定義的最後面加上const修飾,比如:
a fun4() const;
其意義上是不能修改除了函式區域性變數以外的所在類的任何變數。
我們要想在類中實現常量定義大致上有幾種實現方式
1.使用列舉型別
class
test
;//列舉常量
int array1[size1]
;int array2[size2]
;}
2.使用const
不能在類宣告中完成初始化const資料成員。以下用法編譯器會報錯,因為類物件未被建立時,編譯器不知道size的值是什麼。
// 錯誤例項
class
test
正確使用const用法是:const資料成員的初始化只能在類建構函式的初始化表中進行。
classa;
a::a
(int size)
:size
(size)
// 建構函式的初始化表
//error 賦值的方式是不行的
a::a
(int size)
void main()
注意:對const成員變數的初始化,不能在變數宣告的地方,必須在類的建構函式的初始化列表中完成,即使是在建構函式內部賦值也是不行的。
3.使用static const
通過結合靜態變數來實現:
class
year};
intconst year::inity=
1997
;//靜態變數的賦值方法,注意必須放在類外定義
void
main()
到這裡就把在類中定義常量的方法都陳列出來了。
對於不管是標準庫中的物件或則是我們自定義的物件,如果我們定義的是const物件,那麼對於const物件只能呼叫const修飾的函式,其餘的函式都不能呼叫。
如下例子:
class
test
~test()
void
set(
int yy)
intgetx()
const
const
int x;
int y;};
void
main()
const關鍵字修飾類
include using namespace std if 0 1 const修飾資料成員 成員函式 類物件 2 修飾資料成員的時候 只能在形參列表裡面初始化。被const修飾的資料成員,不能被修改 3 修飾成員函式 位置 函式宣告之後,實現體之前。要求在宣告和定義處都要有const 意義 con...
C語言const關鍵字修飾指標
const int p p 可變,p 指向的物件不可變 int const p p 可變,p 指向的物件不可變 int const p p 不可變,p 指向的物件可變 const int const p 指標p 和p 指向的物件都不可變 在平時的授課中發現學生很難記住這幾種情況。這裡給出乙個記憶和理...
C中const關鍵字
const 用法 定義常量,修飾指標 函式的輸入引數和返回值,把定義或者修飾的變數屬性設為唯讀。本質上它只是在全域性資料段或者棧中定義的是乙個唯讀的常量,不是真正位於字串常量區。所以關鍵字const 並不能把變數變成真正的常量,事實上還是可以改變 const 定義的變數的值。const 的目的是為了...