Const in c 常型別資料成員與函式引數

2021-10-05 23:52:01 字數 2502 閱讀 6872

#include

#include

intmain()

此時*a的值就是 2;

#include

#include

intmain()

以上這種寫法還可以被寫為:

int

const

*a =

newint

;

這倆種都是指向const的指標,也就是說指向的值不可以被修改,但是指標本身可以更改。

但是要注意的是,a = (int*)&max; 並沒有報錯的原因!

const int a = new int; 是指向整形常量 的指標,它指向的值不能修改,但是指標本身是可以改變的!a = (int)&max;也沒有報錯!

再說說const指標

#include

#include

intmain()

乙個小技巧就是:結合上圖 有內往外分析到底四指向const的指標 還是乙個const的指標

const與static

類成員中的靜態變數與常量其實都應該在類的定義之外被定義

class

entity

;int entity::b =10;

entity::

entity

(a)

也就是:靜態常資料成員在類外進行初始化和說明!而constant只能在類外通過初始化列表來進行初始化賦值!

有乙個特殊情況:static const int / enum時可以在類內部直接進行初始話,沒必要在類外!但是也有例外就是當b有取位址或者引用出現的時候,必須要用專門的定義為entity::b分配記憶體!且不能在類定義之外再賦予初值!

class

entity

};

means整個method都是constan,都是不能被修改的,如果:

class

entity

void

set(

int x)

};

由此可見,即便是private種的m_x不是個constant,但是一旦在getx函式中也不可以被修改!

但是,如果m_x m_y都為pointer,想要有同樣的效果就必須要:

class

entity

};

在一行中寫三次const!前倆個const表示的是:這個指標本身和指向const指標都不可發生改變

而最後乙個const就是說整個method都不可發生改變!

函式與引數

class

entity

void

set(

int x)};

void

printentity

(const entity* e)

intmain()

void printentity(const entity* e)傳入的引數為乙個指向const的指標的時候,就說明這個指標還是可以被修改的!e = nullptr;但是我還是不能在main函式中修改entity e!

class

entity

void

set(

int x)};

void

printentity

(const entity& e)

當函式的引數變為引用型別的時候,不能再當指標來處理!因為引用它本身就是乙個constant所以第一處報錯!

因為getx()變成了非const函式,所以它不能保證m_x不會發生改變,所以第二處會報錯!

class

entity

intgetx()

void

set(

int x)};

void

printentity

(const entity& e)

intmain()

有時會看見倆個getx()函式 就是因為const的那乙個被用在傳遞const &的函式中,而其他的函式呼叫非const!簡單來說:const關鍵字在這裡可以離用來對過載函式的區分!

但是如果說我非要再乙個const函式裡面修改資料成員呢?

小結:對於基本型別的常引用,則不能進行賦值!而對於類型別的引用,不可呼叫它的非const的函式、不能修改它的資料成員(除非使用mulat)。

而對於常應用來說:在函式中只是 read-only 的引數,不宜使用普通型別引用,耗時太長,一般就是用const &即可!

以後繼續補充!

常引用,常物件,常成員函式,常資料成員

常引用 形式 const 型別 物件名或變數名 常物件 形式 const 類名 物件名 1.常物件的資料成員不能被修改了,在定義的時候應該對其進行初始化 2.常物件不能夠呼叫普通成員函式 因為普通成員函式可能會修改物件的資料型別,這是不安全的。3.常物件可以呼叫靜態成員函式,常成員函式,其實也可以調...

常資料成員 常成員函式 常物件

常資料成員的初始化只能在類建構函式的初始化表中 mino mino const char name,int age,string birth,int height,int weight m name name m birthdate birth 初始化表 將const指標轉化為非cosnt以修改非常...

常物件 常資料成員 常成員函式總結

include using namespace std class time void out value void out value const 常成員函式可以引用非常物件和常物件的成員變數 如輸出或者計算 但不能修改 void set value int int int void time s...