關於const的用法,C 中的const的用法

2022-02-28 12:40:53 字數 5411 閱讀 9239

1樓:匿名使用者

c/c++語言中的const:

一、概念:

常型別是指使用型別修飾符const說明的型別,常型別的變數或物件的值是不能被更新的。

二、const的使用

1、定義常量

(1)const修飾變數,以下兩種定義形式在本質上是一樣的。它的含義是:const修飾的型別為type的變數value是不可變的。

type const valuename = value;

const type valuename = value;

(2)將const改為外部連線,作用於擴大至全域性,編譯時會分配記憶體,並且可以不進行初始化,僅僅作為宣告,編譯器認為在程式其他地方進行了定義.

extend const int valuename = value;

2、指標使用const

(1)指標本身是常量不可變

(char*) const pcontent;

const (char*) pcontent;

(2)指標所指向的內容是常量不可變

const (char) *pcontent;

(char) const *pcontent;

(3)兩者都不可變

const char* const pcontent;

(4)還有其中區別方法,沿著*號劃一條線:

如果const位於*的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;

如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。

3、函式中使用const

(1)const修飾函式引數

a.傳遞過來的引數在函式內不可以改變(無意義,因為var本身就是形參)

void function(const int var);

b.引數指標所指內容為常量不可變

void function(const char* var);

c.引數指標本身為常量不可變(也無意義,因為char* var也是形參)

void function(char* const var);

d.引數為引用,為了增加效率同時防止修改。修飾引用引數時:

void function(const class& var); //引用引數在函式內不可以改變

void function(const type& var); //引用引數在函式內為常量不可變

這樣的乙個const引用傳遞和最普通的函式按值傳遞的效果是一模一樣的,他禁止對引用的物件的一切修改,唯一不同的是按值傳遞會先建立乙個類物件的副本, 然後傳遞過去,而它直接傳遞位址,所以這種傳遞比按值傳遞更有效.另外只有引用的const傳遞可以傳遞乙個臨時物件,因為臨時物件都是const屬性, 且是不可見的,他短時間存在乙個區域性域中,所以不能使用指標,只有引用的const傳遞能夠捕捉到這個傢伙.

(2)const 修飾函式返回值

const修飾函式返回值其實用的並不是很多,它的含義和const修飾普通變數以及指標的含義基本相同。

a.const int fun1() //這個其實無意義,因為引數返回本身就是賦值。

b. const int * fun2() //呼叫時 const int *pvalue = fun2();

//我們可以把fun2()看作成乙個變數,即指標內容不可變。

c.int* const fun3() //呼叫時 int * const pvalue = fun2();

//我們可以把fun2()看作成乙個變數,即指標本身不可變。

一般情況下,函式的返回值為某個物件時,如果將其宣告為const時,多用於操作符的過載。通常,不建議用const修飾函式的返回值型別為某個物件或對某個物件引用的情況。原因如下:

如果返回值為某個物件為const(const a test = a 例項)或某個物件的引用為const(const a& test = a例項) ,則返回值具有const屬性,則返回例項只能訪問類a中的公有(保護)資料成員和const成員函式,並且不允許對其進行賦值操作,這在一般情況下很少用到。

2樓:匿名使用者

呵呵,想法挺獨特啊。

const在宣告變數時有四種用法:

int x = 10;int y = 11.

const int a = 0;意思變數a的值是不可改變的。

const int *b = &x;叫指向常量的指標。意思是不能通過指標b來改變變數x的值,(但如果x是可變的,則可以用變數名x來改變變數的實際值)。

int * const c =&x;是常量指標。意思是指標c的指向不可以改變(即不能再讓指標c指向變數y),但可以通過指標c改變變數x的值。

const int *const d = &x;是指向常量的常量指標。意思是既不能改變指標d的指向,也不能通過指標d改變變數x的值。

c中指標是很重要的,但也是最難的。

c++中的const的用法

3樓:傅夏生

個人的一些筆記,希望可以幫助你

const 的使用

const經常用來修飾乙個值不能改變的量,安全,並且能消除儲存操作

const的幾種用法:

(1) 說明值常量

(2) 說明指標

(3) 說明函式引數及其返回值

(4) 說明類的常量和成員函式

const 說明值常量

值常量的說明一般放在標頭檔案或者檔案的開始部分,也可以放在類中進行說明

(1) 說明符號常量,表明符號代表的是乙個常量,語法:

《型別》const《常量名》=《表示式》,《常量名》=《表示式》……

例如:double const pi=3.14; const double pi=3.14;

(2) 說明陣列常量,語法格式:

《型別》const《陣列名》[大小]=;

const型別》 《陣列名》[大小]=;

(3) 說明物件常量,語法格式:

《類名》const《物件名》;

const 《類名》 《物件名》;

(4) 說明引用常量

(5) const與c語言中的#define的差別

無參巨集不是符號常量,沒有資料型別,沒有值,在記憶體中不分配位址。它在預處理時做巨集替換,不可能做型別檢查。

const定義的常量是符號常量,有資料型別,也有值,且其值不可改變,在記憶體中有位址,編譯時做型別檢查。

const和指標

const和指標的三種經典組合

(1) 指向常量的指標——const int *p;

(2) 常指標——char *const pc=』a』;

(3) 指向常量的常指標——const char *const pc=』a』

指向常量的指標(指標指向乙個不可變數)

指標在指向有乙個常量後,不能通過指標修改這個常量,但是可以指向乙個新的常量,例如:

const char *pc=」abcd」;

pc[3]=』a』;不合法,企圖修改原來指向的常量

pc=「wert」;合法指向另外乙個常量

常指標要把指標變數中的值(也就是位址)宣告為常量,採用以下語法:

《類那些》*const《指標名》[=《初值》;]

這樣定義的指標變數中存放的指標是個常量,稱為常指標。定義後,該指標指向固定的記憶體單元,不能再指向其他記憶體單元,通過它可以修改所指單元裡存放的內容。例如:

char *const pc=」abcd」;

pc[3]=』a』;合法,指標指向的物件可以修改

pc=」qwer」;不可以,指標的指向不可以修改

指向常量的常指標

指標變數中存放的指標本身和指標所指向的物件都是不可以改變的。

例如:const char *const pc=」asdf」;

pc[3]=』a』;不合法,不能改變指標所指物件的值

pc=」qwer」;不合法,不能改變指標的指向

const說明函式引數和返回值

用const限定函式引數和返回值,是const最重要的用法。用const修飾函式引數意味著傳過來的實參在函式中是不能被修改的。一般情況下不需要,但是在用指標和引用傳值的場合,為避免實參被修改,就用const修飾,更安全。

修飾函式的返回值,意味著該返回值不能被修改。如果傳值並返回位址,const將保證該位址上的內容不會被改變。這就意味著該函式不能作為左值使用,在這種情況下,const通常也是與引用和指標一起使用的。

類中的const

1. 常成員的函式

2. 常資料成員

3. 常物件

4樓:惠智傑

我來說一下,具體原因應該是這個,常變數在定義的時候必須初始化,所以當你在a.cpp中定義extern const double pi=3.14; b.

pp中extern const double pi;可以通過編譯執行。因為當編譯系統發現a.cpp中的全域性常變數時,就知道它pi是常量,而換過來的時候,在a.

cpp中定義const double pi=3.14; b.pp中extern const double pi;編譯系統在編譯a.

cpp是沒有問題的,但到了b.cpp中就會發現,有乙個外部常量是沒有初始化的,而常量是不能在宣告後再進行定義的,所以編譯系統會認為找不到它的定義,所以就出錯。

對於extern "c"主要是因為c和c++編譯器不同,它們對相同的函式名編譯後生成的相同的標示不同,故而在引用c的庫檔案時必須使用extern 「c」告訴編譯器,它是c的函式,按c的規則編譯。通常我們使用的標準標頭檔案已被處理過。 貌似沒有用於常量的宣告。

5樓:97樂於助人

返回const,則呼叫時也必須宣告為const,防止返回的指標內容被修改。

6樓:匿名使用者

1,希望成員函式不改變成員的時候:比如:int a::print const {}

2,不希望指標去改變指向的記憶體空間:比如: const int* p;

3,不希望指標的指向被改變:比如: int *const p;

4,還有就是引用。。

7樓:秒懂百科

const:乙個c語言的關鍵字

8樓:匿名使用者

如果const用於定義乙個非指標的普通變數,就是定義了乙個常變數,這個變數以後的值在生命期內是不能改變的,因此也必須對該變數進行初始化,在c++中要在類的初始化列表中初始化。

如果const用於定義乙個指標變數,不同的寫法有不同的意思。例如const char *p和char* const p 前者表示p指向的內容是不能夠改變的,後者是指p本身的值是不能夠改變的。

如果用於修飾函式返回值,效果和修飾變數一樣。

const修飾類的成員函式,則該成員函式不能修改類中任何非const成員函式。一般寫在函式的最後來修飾。

const修飾類物件表示該物件為常量物件,在物件的生命期中其中的任何成員都不能被修改。

關於const用法還是比較複雜的,還有很多用法,我也沒有總結詳盡,以後遇到可以自己寫程式測試。

CO中的C是什麼,CO中C的原子價等於幾

就是一氧化碳中含有碳元素。或者乙個一氧化碳分子中含有乙個碳原子 c 碳 co 一氧化碳 c代表碳元素,其在co中的化合價為 2價。co中c的原子價等於幾 因為碳酸鈉na2co3中,鈉為 1價,根據化合物中元素化合價的代數和為0的規則,可以算出其原子團碳酸根co3的化合價為 2價。再如 kmno4,原...

C 中getline的用法,C 中,getline函式的詳解

getline 語法 用getline 讀取字元到buffer中,buffer在 中通常體現為乙個字元陣列,streamsize num是一次讀入多少個字元,num 1個字元已經讀入,當碰到乙個換行標誌,碰到乙個eof,或者任意地讀入,直到讀到字元delim。delim字元不會被放入buffer中。...

C中this指標的用法

this 關鍵字引用類的當前例項,還可用作擴充套件方法的第乙個引數的修飾符。以下是 this 的常用用途 限定被相似的名稱隱藏的成員,例如 public employee string name,string alias 將物件作為引數傳遞到其他方法,例如 calctax this 宣告索引器,例如...