1、只允許在類的非靜態成員函式後面加const;(加到非成員函式 或 靜態成員後面會產生編譯錯);
2、後面加的const其實是對隱含傳入引數this指向類物件的修飾,即 *this 是被const修飾,那this所指向的類物件的成員都是不允許被修改的;
(備註:有人認為const修飾的是this指標,那麼不能改變的就是this指標本身,而不是this指標指向的成員,其實這個const修飾的是this和(*this),下面**有詳細解釋,this指標的實際引數是:const a * const this格式的)
3、唯一的例外是對於mutable修飾的成員。
4、加了const的成員函式可以被非const物件和const物件呼叫,但不加const的成員函式只能被非const物件呼叫
1 、返回值為const;
#include
#include
#include
#include
#include
#include
using
namespace std;
//const和函式結合
//一、const在函式後面
//1、只允許在類的非靜態成員函式後面加const;(加到非成員函式 或 靜態成員後面會產生編譯錯);
//2、後面加的const其實是對隱含傳入引數this指向類物件的修飾,即 *this 是被const修飾,
//那this所指向的類物件的成員都是不允許被修改的;
//(備註:有何友人認為const修飾的是this指標,那麼不能改變的就是this指標本身,
//而不是this指標指向的成員,其實這個const修飾的是this和(*this),下面**有詳細解釋)
//3、唯一的例外是對於mutable修飾的成員。
//4、加了const的成員函式可以被非const物件和const物件呼叫,
//但不加const的成員函式只能被非const物件呼叫
//二、const在函式前面
// 1 、返回值為const;
void
func1
(int a,
int b)
const
//error 參考規則1 只允許在類的非靜態成員函式後面加const;
//(加到非成員函式 或 靜態成員後面會產生編譯錯);
static
intfunc2()
const
//error參考規則1 只允許在類的非靜態成員函式後面加const;
//(加到非成員函式 或 靜態成員後面會產生編譯錯);
class
astatic
void
sub(
int a,
int b)
const
//error 參考規則1 只允許在類的非靜態成員函式後面加const;
//(加到非成員函式 或 靜態成員後面會產生編譯錯);
private
:int m_a;
int m_b;
mutable
int m_c;};
const
char
*func3()
intmain()
c 在類函式前 後加const的意義
我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是 唯讀 函式,而有一些函式要修改類資料成員的值。如果把不改變資料成員的函式都加上const關鍵字進行標識,顯然,可提高程式的可讀性。其實,它還能提高程式的可靠性,已定義成const的成員函式,一旦企圖修改資料成員的值...
c 在函式後加const的意義
我們定義的類的成員函式中,常常有一些成員函式不改變類的資料成員,也就是說,這些函式是 唯讀 函式,而有一些函式要修改類資料成員的值。如果把不改變資料成員的函式都加上const關鍵字進行標識,顯然,可提高程式的可讀性。其實,它還能提高程式的可靠性,已定義成const的成員函式,一旦企圖修改資料成員的值...
函式名前後的const
一 概念 當const在函式名前面的時候修飾的是函式返回值,在函式名後面表示是常成員函式,該函式不能修改物件內的任何成員,只能發生讀操作,不能發生寫操作。二 原理 我們都知道在呼叫成員函式的時候編譯器會將物件自身的位址作為隱藏引數傳遞給函式,在const成員函式中,既不能改變this所指向的物件,也...