const的幾種用法

2021-08-10 02:14:23 字數 1690 閱讀 5018

const int i = 0;

int const i= 0;

這兩種用法相同,宣告的同時需要初始化。

extern const int i = 0;

extern const int i ;

c++ 將const 變數的作用域設定為乙個檔案內。如 tall.cpp中的const int i;不能被 high.cpp 直接呼叫。但有時想要讓 tall.cpp 中的const int i 被其他檔案呼叫。那麼就需要加上extern關鍵字,如第一條語句所示。而 high.cpp 想要呼叫 tall.cpp中的 const int i,則需要在檔案中做出宣告,如第二條語句所示。

int i = 0;

const int j = 0;

const int & k = i;  //常量引用,引用非常量。

const int & k = j;  //常量引用,引用常量。

int & k = j;           //這條語句是錯誤的,因為 j 為常量,而 k 為非常量引用,可能會修改 j 的值。

const int & 這種形式叫做對「常量引用」,它是「對const的引用」的簡稱。它引用的物件可以是常量,也可以是非常量。注意:常量引用可以引用非常量、常量。而非常量引用只能引用非常量。

int i = 0;

int * k = & i ;

const int * j = & i ;    //可以理解為 const 修飾 * j ,即 * j是乙個常量。而 j 可以指向不同的變數,也就是 j 可以修改 可以賦值。

j = k;                     //正確的。

* j = 1;                  //錯誤的。

int * const  r = & i;   //可以理解為const修飾 r ,即 r 永遠指向 i 。而* r 所代表的值是可以改變的。

*r = 5;                   //正確的。

r = k;                     //錯誤的。

那麼,你能否根據上述內容理解這條語句呢:const int * const j = & i;

看以下**:

const stock land = stock( " canshu " );

land.show();

這段**定義了stock類的乙個物件land。由於land是乙個常量物件,所以show()是不能夠修改land值的。那麼如何正確宣告show()呢?

下面是常見的一種宣告普通函式的方法:

int sum ( const int a, const int b )

函式引數表中,含有兩個const 形參:const int a, const int b。這兩個const的存在使得sum函式只能使用a,b的值而不能修改。

類似的,我們可以定義show()函式。但是從show()的呼叫方式 land.show() 可以看到,show()是沒有形參的。怎麼辦呢?其實show()的形參就是land ,那麼我們要如何使用const呢?看下面**:

void stock::show() const{   cout<<"啊?」<

此處的const就是表示show()只是呼叫land的資料而不進行修改。

const int * const i = & j ;

這段**有兩個const。第乙個修飾 * i  ,被稱為底層const。 第二個修飾 i,被稱為頂層const。

C語言const幾種常見用法

作為乙個c程式設計師,const是最常用到的關鍵字之一,當然也是c語言面試最常被問到的經典問題之一。初學者常被這個關鍵字困擾,也因此在面試時倒在const的石榴裙下。這個關鍵字也困擾了我很長時間,為了讓自己記憶深刻一點,故做了這個學習筆記。注 在寫本篇學習筆記時,本人學習和參考了網路文章,並做了借鑑...

C語言中const的幾種用法區分

你知道我們宣告乙個變數時象這樣int i 這個i是可能在它處重新變賦值的。如下 int i 0 i 20 這裡重新賦值了 不過有一天我的程式可能需要這樣乙個變數 暫且稱它變數 在宣告時就賦乙個初始值。之後我的程式在其它任何處都不會再去重新對它賦值。那我又應該怎麼辦呢?用const const int...

Const與Const的用法

const 是c 中常用的型別修飾符,常型別是指使用型別修飾符const說明的型別,常 型別的變數或物件的值是不能被更新的。const的作用 1 可以定義常量 即const int a 5 a就是乙個被const修飾的常量,它在程式執行期間是無法被改變的!2 保護被修飾的東西 例如乙個函式的首部為v...