c++關(guān)鍵字const的用法詳解
C語(yǔ)言const的用法
我們知道,const可以修飾一般的變量,這樣的變量我們稱之為常變量,常變量的值是不能修改的。
const也可以修飾指針變量,可以指定指針變量是一個(gè)常量,或者指定指針變量指向的對(duì)象是一個(gè)常量。有以下幾種情況。
1、指向常量的指針變量
const int *p指針指向int a;
格式為:
const 類型名 * 指針變量名;
#include<iostream> using namespace std; int main() { int a = 10; const int *p = &a; //*p = a;//報(bào)錯(cuò),表達(dá)式必須是可以修改的左值。 a = 20;//合法 cout << a << endl; return 0; }
分析:用指向常量的指針變量只是限制了通過指針變量改變它指向的對(duì)象的值,但是可以通過它本身來改變它的值。
指向常量的指針變量一般用處是作為函數(shù)參數(shù)
2、常指針(常地址)
int * const p指針指向int a;
形式為:
類型名 * const 指針變量名;
#include<iostream> using namespace std; int main() { int a = 10; int b = 10; int * const p = &a; *p = a;//合法 //p = &b;報(bào)錯(cuò),表達(dá)式必須是可以修改的左值。 cout << a << endl; return 0; }
說明:
1.這種指針變量稱為常指針變量,簡(jiǎn)稱常指針,即指針值(地址)不能改變。
2.必須在定義時(shí)初始化,指定其指向(類似于在建立常變量時(shí)也必須初始化)
3.指針變量的指向不能改變你,但是指針變量的指向變量的值可以改變
4.注意const和*的位置
常指針一般用處在于c++的引用。c++引用的本質(zhì)就是常指針
3、指向常量的常指針
const int * const p指針指向int a;
形式為:
const 類型名 * const 指針變量名;
#include<iostream> using namespace std; int main() { int a = 10; int b = 10; const int * const p = &a; //*p = a;//報(bào)錯(cuò),表達(dá)式必須是可以修改的左值。 //p = &b;//報(bào)錯(cuò),表達(dá)式必須是可以修改的左值。 a = 100;//合法 cout << a << endl; return 0; }
4、其他情況
4.1 int *p指針指向const int a(報(bào)錯(cuò))
#include <iostream> using namespace std; int main() { const int a = 10; //int *p = &a;//報(bào)錯(cuò),const int不能用于初始化int * return 0; }
4.2const int *p指針指向const int a
#include <iostream> using namespace std; int main() { const int a = 10; const int b = 20; const int *p=&a; //*p = 100;//報(bào)錯(cuò),表達(dá)式必須是可修改的左值 //a = 100;//報(bào)錯(cuò),表達(dá)式必須是可修改的左值 p = &b;//合法 cout << *p << endl; return 0; }
c++語(yǔ)言const的用法
c++是對(duì)c語(yǔ)言的擴(kuò)展,除了上述從c語(yǔ)法繼承過來的語(yǔ)法之外,還有自己獨(dú)有的const用法,主要體現(xiàn)在常對(duì)象,常數(shù)據(jù)成員,常成員函數(shù)等方面。
常數(shù)據(jù)成員
在類的數(shù)據(jù)成員聲明前面加上const修飾符就成為了常數(shù)據(jù)成員。
格式如下:
const 數(shù)據(jù)類型 數(shù)據(jù)成員名;
關(guān)于常數(shù)據(jù)成員的說明如下:
1、類的常數(shù)據(jù)成員必須進(jìn)行初始化,而且只能通過構(gòu)造函數(shù)的成員初始化列表進(jìn)行初始化。列表中對(duì)成員的初始化順序,與他們?cè)诹斜碇械捻樞驘o關(guān),而與它們?cè)陬愔械穆暶黜樞蛴嘘P(guān)。
2、包含常數(shù)據(jù)成員的類不能使用默認(rèn)構(gòu)造函數(shù)。
3、在對(duì)象被創(chuàng)建以后,其常數(shù)據(jù)成員的值就不能被改變。
常數(shù)據(jù)成員總結(jié):其實(shí)加了const修飾之后,就是讓該數(shù)據(jù)成員成了不能修改的左值。
常成員函數(shù)
注意:常數(shù)據(jù)成員的const修飾是放在成員函數(shù)后面的。
格式如下:
函數(shù)類型 成員函數(shù)名(參數(shù)列表) const;
關(guān)于常成員函數(shù)的說明:
1、常成員函數(shù)不能修改對(duì)象的數(shù)據(jù)成員值(無論是否有const修飾)。
2、const修飾發(fā)要加在函數(shù)說明的尾部,并且作為函數(shù)類型的一部分,不能省略。如果常成員函數(shù)定義在類外,那么不論是在類內(nèi)聲明,類外定義,都不能省略關(guān)鍵字const。
3、const成員函數(shù)不能訪問非const成員函數(shù)。
4、const作為函數(shù)類型的一部分,可以參與區(qū)分重載函數(shù)。
常成員函數(shù)總結(jié):其實(shí)加了const修飾后,就是限制其修改數(shù)據(jù)成員的值(無論是否有const修飾)和訪問非const成員函數(shù)。
常對(duì)象
const修飾對(duì)象的格式如下:
類名 const 對(duì)象名(實(shí)參列表):
const類名 對(duì)象名(實(shí)參列表):
關(guān)于常對(duì)象的說明:
1、常對(duì)象的數(shù)據(jù)成員都是為常數(shù)據(jù)成員,不能改變其值,因此在定義常對(duì)象時(shí),構(gòu)造函數(shù)只能用參數(shù)初始化列表對(duì)常數(shù)據(jù)成員初始化。
2、常對(duì)象的成員函數(shù)不自動(dòng)成為常成員函數(shù),且常對(duì)象不能調(diào)用非常成員函數(shù),要想被常對(duì)象調(diào)用,必須聲明為常成員函數(shù)。
3、常對(duì)象在定義時(shí)必須初始化,并且其數(shù)據(jù)值不能改變。
常對(duì)象總結(jié):常對(duì)象就是限制其只能調(diào)用常成員函數(shù)并且讓其數(shù)據(jù)成員變成const數(shù)據(jù)成員。
指向常對(duì)象的指針變量
指向常對(duì)象的指針變量與指向常變量的指針變量是完全一樣的。
指向?qū)ο蟮某V羔?/h3>
指向?qū)ο蟮某V羔樑c指向變量的常指針是完全一樣的。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++使用string的大數(shù)加法運(yùn)算(1)
這篇文章主要為大家詳細(xì)介紹了C++使用string的大數(shù)加法運(yùn)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09C語(yǔ)言如何利用ASCII碼表統(tǒng)計(jì)字符串每個(gè)字符出現(xiàn)的次數(shù)
這篇文章主要介紹了C語(yǔ)言如何利用ASCII碼表統(tǒng)計(jì)字符串每個(gè)字符出現(xiàn)的次數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法
這篇文章主要介紹了詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C語(yǔ)言time.h庫(kù)函數(shù)的具體用法
C語(yǔ)言的time.h頭文件提供了一系列的函數(shù)和工具,用于處理時(shí)間和日期相關(guān)的操作,本文主要介紹了C語(yǔ)言time.h庫(kù)函數(shù)的具體用法,感興趣的可以了解一下2023-12-12C++?實(shí)現(xiàn)單鏈表創(chuàng)建、插入和刪除
這篇文章主要介紹了C++?實(shí)現(xiàn)單鏈表創(chuàng)建、插入和刪除方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Opencv Hough算法實(shí)現(xiàn)圖片中直線檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12C++中拷貝構(gòu)造函數(shù)的應(yīng)用詳解
這篇文章主要介紹了C++中拷貝構(gòu)造函數(shù)的應(yīng)用,需要的朋友可以參考下2014-07-07matlab鳥群算法求解車間調(diào)度問題詳解及實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了matlab鳥群算法求解車間調(diào)度的問題分析及實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02