C 中const在不同物件不同位置中的作用

2021-10-02 22:49:39 字數 1522 閱讀 5704

兩者都可以用來定義常量,但是const定義時,定義了常量的型別,所以更精確一些。#define只是簡單的文字替換,除了可以定義常量外,還可以用來定義一些簡單的函式,有點類似內聯函式(inline)。const和define定義的常量可以放在標頭檔案裡面。(小注:可以多次宣告,但只能定義一次)

(a)const與指標

先來看看下面的幾種定義:

int p;

const int * p1=&p;//p1可變,*p1不可變,此時不能用*p1來修改,但是p1可以轉向

int * const p2=&p;//p2不可變,*p2可變,此時允許*p2來修改其值,但是p2不能轉向。

const int *const p3=&me;//p3不可變,*p3也不可變,此時既不能用*p3來修改其值,也不能轉向

(b)指標和引用的區別很簡單,就是引用更簡潔,更安全。因為引用宣告時必須初始化。 引用更接近const指標,一旦與某個變數關聯,就將一直效忠於他。

(c)const指標可以接受const和非const位址,但是非const指標只能接受非const位址。所以const指標的能力更強一些,所以盡量多用const指標,這是一種習慣。  

(a)const與傳遞值引數

void function(const int var); //傳遞過來的引數在函式內不可以改變.
(b)const與返回值

const int fuction1 (int);
此處返回const值,意思指返回的原函式裡的變數的初值不能被修改,但是函式按值返回的這個變數被製成副本,能不能被修改就沒有了意義,它可以被賦給任何的const或非const型別變數,完全不需要加上這個const關鍵字.但這只對於內部型別而言(因為內部型別返回的肯定是乙個值,而不會返回乙個變數,不會作為左值使用),對於使用者自定義型別,返回值是常量是非常重要的

(c)const與成員函式 

void function(void)const; // ,編譯器會對這個函式進行檢查,在這個函式中的任何試圖改變成員變數和呼叫非const成員函式的操作都被視為非法

int stack::functiont(void) const

(a)const資料成員的初始化只能在類的建構函式的初始化表中進行

class a

;

(b)非常量成員函式不能被常量成員物件呼叫,因為它可能企圖修改常量的資料成員:

class set 

bool member(const int) const;

void addelem(const int);

//...

};const set s;

s.addelem(10); // 非法: addelem不是常量成員函式

s.member(10); // 正確

(c)成員函式可基於const實現過載。

(a)要大膽的使用const,這將給你帶來無盡的益處。

const 不同位置的不同含義

型別宣告中const用來修飾乙個常量,有如下兩種寫法 1 const 在型別前面 const int nvalue nvalue 是const const char pcontent pcontent是 const,pcontent可變 const char pcontent pcontent是 c...

const 不同位置的不同含義以及使用方法

一 一般用法 對於乙個變數使用const使之變為常量 const int a 0 二 對於指標 一句話總結 在誰的前面就是修飾誰 1 如果想要讓指標所指位置的內容不能修改則應該如下定義 前面放置const int a 0 const int b 1 const int p p a 可以將非const...

const在c和c 中地位不同

先測試c語言的const includeint main 不是指標變數的表示式,const放在型別的前後都沒關係,但是在指標變數中,const的位置就有講究了,此時要分清楚是指標變數的值是唯讀的還是指標所指向的記憶體空間是唯讀的。而且,c語言中,const是個假const includeint ma...