c++關鍵字const的用法詳解
C語言const的用法
我們知道,const可以修飾一般的變量,這樣的變量我們稱之為常變量,常變量的值是不能修改的。
const也可以修飾指針變量,可以指定指針變量是一個常量,或者指定指針變量指向的對象是一個常量。有以下幾種情況。
1、指向常量的指針變量
const int *p指針指向int a;
格式為:
const 類型名 * 指針變量名;
#include<iostream> using namespace std; int main() { int a = 10; const int *p = &a; //*p = a;//報錯,表達式必須是可以修改的左值。 a = 20;//合法 cout << a << endl; return 0; }
分析:用指向常量的指針變量只是限制了通過指針變量改變它指向的對象的值,但是可以通過它本身來改變它的值。
指向常量的指針變量一般用處是作為函數(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;報錯,表達式必須是可以修改的左值。 cout << a << endl; return 0; }
說明:
1.這種指針變量稱為常指針變量,簡稱常指針,即指針值(地址)不能改變。
2.必須在定義時初始化,指定其指向(類似于在建立常變量時也必須初始化)
3.指針變量的指向不能改變你,但是指針變量的指向變量的值可以改變
4.注意const和*的位置
常指針一般用處在于c++的引用。c++引用的本質就是常指針
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;//報錯,表達式必須是可以修改的左值。 //p = &b;//報錯,表達式必須是可以修改的左值。 a = 100;//合法 cout << a << endl; return 0; }
4、其他情況
4.1 int *p指針指向const int a(報錯)
#include <iostream> using namespace std; int main() { const int a = 10; //int *p = &a;//報錯,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;//報錯,表達式必須是可修改的左值 //a = 100;//報錯,表達式必須是可修改的左值 p = &b;//合法 cout << *p << endl; return 0; }
c++語言const的用法
c++是對c語言的擴展,除了上述從c語法繼承過來的語法之外,還有自己獨有的const用法,主要體現(xiàn)在常對象,常數(shù)據(jù)成員,常成員函數(shù)等方面。
常數(shù)據(jù)成員
在類的數(shù)據(jù)成員聲明前面加上const修飾符就成為了常數(shù)據(jù)成員。
格式如下:
const 數(shù)據(jù)類型 數(shù)據(jù)成員名;
關于常數(shù)據(jù)成員的說明如下:
1、類的常數(shù)據(jù)成員必須進行初始化,而且只能通過構造函數(shù)的成員初始化列表進行初始化。列表中對成員的初始化順序,與他們在列表中的順序無關,而與它們在類中的聲明順序有關。
2、包含常數(shù)據(jù)成員的類不能使用默認構造函數(shù)。
3、在對象被創(chuàng)建以后,其常數(shù)據(jù)成員的值就不能被改變。
常數(shù)據(jù)成員總結:其實加了const修飾之后,就是讓該數(shù)據(jù)成員成了不能修改的左值。
常成員函數(shù)
注意:常數(shù)據(jù)成員的const修飾是放在成員函數(shù)后面的。
格式如下:
函數(shù)類型 成員函數(shù)名(參數(shù)列表) const;
關于常成員函數(shù)的說明:
1、常成員函數(shù)不能修改對象的數(shù)據(jù)成員值(無論是否有const修飾)。
2、const修飾發(fā)要加在函數(shù)說明的尾部,并且作為函數(shù)類型的一部分,不能省略。如果常成員函數(shù)定義在類外,那么不論是在類內(nèi)聲明,類外定義,都不能省略關鍵字const。
3、const成員函數(shù)不能訪問非const成員函數(shù)。
4、const作為函數(shù)類型的一部分,可以參與區(qū)分重載函數(shù)。
常成員函數(shù)總結:其實加了const修飾后,就是限制其修改數(shù)據(jù)成員的值(無論是否有const修飾)和訪問非const成員函數(shù)。
常對象
const修飾對象的格式如下:
類名 const 對象名(實參列表):
const類名 對象名(實參列表):
關于常對象的說明:
1、常對象的數(shù)據(jù)成員都是為常數(shù)據(jù)成員,不能改變其值,因此在定義常對象時,構造函數(shù)只能用參數(shù)初始化列表對常數(shù)據(jù)成員初始化。
2、常對象的成員函數(shù)不自動成為常成員函數(shù),且常對象不能調用非常成員函數(shù),要想被常對象調用,必須聲明為常成員函數(shù)。
3、常對象在定義時必須初始化,并且其數(shù)據(jù)值不能改變。
常對象總結:常對象就是限制其只能調用常成員函數(shù)并且讓其數(shù)據(jù)成員變成const數(shù)據(jù)成員。
指向常對象的指針變量
指向常對象的指針變量與指向常變量的指針變量是完全一樣的。
指向對象的常指針
指向對象的常指針與指向變量的常指針是完全一樣的。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
C語言如何利用ASCII碼表統(tǒng)計字符串每個字符出現(xiàn)的次數(shù)
這篇文章主要介紹了C語言如何利用ASCII碼表統(tǒng)計字符串每個字符出現(xiàn)的次數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法
這篇文章主要介紹了詳解C++編程中用數(shù)組名作函數(shù)參數(shù)的方法,是C++入門學習中的基礎知識,需要的朋友可以參考下2015-09-09C++?實現(xiàn)單鏈表創(chuàng)建、插入和刪除
這篇文章主要介紹了C++?實現(xiàn)單鏈表創(chuàng)建、插入和刪除方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07matlab鳥群算法求解車間調度問題詳解及實現(xiàn)源碼
這篇文章主要為大家介紹了matlab鳥群算法求解車間調度的問題分析及實現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2022-02-02