c 筆記 const關鍵字的使用

2021-06-05 15:10:53 字數 2373 閱讀 5103

1.關於const指標

如果關鍵字const出現在星號左邊,表示被指物為常量;如果出現在星號右邊,表示指標自身是常量;如果出現在星號兩邊,表示被指物和指標兩都都是常量。

注意被指物是常量時,以下兩種寫法意義相同:

const int *p;  

int const *p;

2.const成員函式

const成員函式不能修改類的資料成員,也就是說,這些函式是「唯讀」函式。在c++中,const物件只能呼叫const成員函式。但建構函式和析構函式對這個規則例外,它們從不定義為常量成員,但可被常量物件呼叫。

這一類成員函式這所以重要,基於兩個理由。第

一、它們使class介面比較容易被理解。這是因為,得知哪個函式可以改動物件內容而哪個函式不行,很是重要。第

二、它們使用"操作const物件"成為可能。

許多人漠視一件事實:兩個成員函式如果只是常量性的不同,可以被過載。考慮以下class,用來表現一大塊文字:

class textblock

const char& operator (std::size_t position) const

char& operator (std::size_t position)

private:

std::string text;

};

textblock的operator可被這麼使用:

textblock tb("hello");

std::cout << tb[0];  //呼叫non-const textblock::operator

const textblock ctb("world");

std::cout << ctb[0];  //呼叫const textblock::operator

3.關鍵字mutable

mutable關鍵字可以釋放掉non-const約束,使得const成員函式可以訪問non-const成員變數。

4.在const和non-consst成員函式中避免重複

在上面的textblock中,對操作符過載的兩函式有相同的函式體,所以我們可以通過non-const operator呼叫其const兄弟,下面是**:

class textblock

const char& operator (std::size_t position) const

char& operator (std::size_t position)

private:

std::string text;

};

上面的**中使用了兩次轉型,第一次用來為*this新增const(使接下來的呼叫erator時得以呼叫const版本),第二次則是從const operator]的返回值中移除const。

更值得了解的是,反向做法-令const版本呼叫non-const版本以避免重複-並不是你該做的事。記住,const成員函式承諾絕不改變其物件的邏輯狀態,non-const成員函式卻沒有這般承諾。

5.const在c和c++中的區別

c++中的const正常情況下編譯期的常量,編譯器並不為const分配空間。而在c中,const是乙個不能被改變的變數,占用儲存空間,所以編譯器不知道編譯時的值。陣列定義時下標必須為常量,比如下面的**在c++中正確,但在c中編譯通不過。    

const int n = 10;

char str[10];

c++中,const預設使用內部鏈結。

內連線:編譯器只對正被編譯的檔案建立儲存空間,別的檔案可以使用相同的表示符或全域性變數.c/c++中內連線使用static關鍵字指定。

外連線:所有被編譯過的檔案建立一片單獨儲存空間.一旦空間被建立,聯結器必須解決對這片儲存空間的引用.全域性變數和函式使用外部連線.通過extern關鍵字宣告,可以從其他檔案訪問相應的變數和函式。

來看下面一段**:

const int test = 1;

#include "header.h"

int main()

#include "header.h"

void print()

上面**在c++中可以被正確編譯,但是在c中確出現重複定義的錯誤。

摘自:effective c++、

2012-04-10

ps:關於上面的第5點的一些補充

其實const的全域性變數就相當於預設新增了static關鍵字,若要在其它檔案中可以使用,可以使用extern關鍵字顯式宣告:

extern const int i=0;//需要顯示指定extern

extern const int i;

cout <

c 筆記 const關鍵字

2.const在函式中的應用 使用const修飾指標,有兩種用法,達到兩種作用 例程1 int num 10 const int p 此例子中,不代表num是乙個常量,而是不能通過指標p來修改num的值 例程2 const int num 10 const int p int p 錯誤此例中,需要注...

C 筆記 const關鍵字

在c 中用來修飾內建型別變數 int,float,char 巴拉巴拉之類 自定義物件,成員函式,返回值,函式引數。一.修飾普通變數 const int a 7 int b a 正確 a 8 錯誤,不能改變當乙個變數被定義為const 型別常量,便不可再次對其賦值。直接賦值,編譯器會報錯。通過指標型別...

const關鍵字的使用

看到const 關鍵字,c 程式設計師首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const 定義常量,那麼相當於把火藥僅用於製作鞭炮。const 更大的魅力是它可以修飾函式的引數 返回值,甚至函式的定義體。const 是constant 的縮寫,恆定不變 的意思。被cons...