国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 中 const 詳解

2019-11-08 01:45:04
字體:
來源:轉載
供稿:網友

一:定義常量

??const關鍵字指定變量的值是恒定的,以防止程序員修改它,并且在定義一個const變量時必須初始化它,除非你用了extern關鍵詞準備來進行外部鏈接。

const int i = 5; //right,和 int const i=5; 等價 const int j; //error,未初始化extern const int k; //right,外部鏈接

二:指針使用const

2.1 指向常量int的指針

int x = 1;const int* p1 = &x;int const* p2; //兩種寫法表示的都是一個意思*p1 = 10; //error,你不可以通過指針p1改變x值

??注意,const在這里可以不為其初始化。

2.2 指向變量int的常量指針

int x = 1;int* const p1 = &x; //right*p1 = 3; //right,與2.1不同,你可以通過指針p1修改x值int* const p2; //error,與2.1不同,必須初始化int y = 2;p1 = &y; //error,你不可以讓p1指向別的地方

2.3 const指針與普通指針的區別

int x = 1;const int* con_p = &x;int* p = con_p; //error

??我們很容易知道第三句代碼是錯的。也就是不可以把指向常量的指針賦給一個普通的指針,這是為了防止普通指針修改該常量。 ??那下面的代碼呢?

int x = 1;int* const con_p = &x;int* p = con_p; //right

??這句代碼是對的。把指向變量的常量指針賦給一個普通指針,注意賦值的是x的地址,這無關常量指針的事,要注意區分。

2.4 總結

??請注意,const是一個左結合的類型修飾符,根據這個特點可以很容易總結如下: ??const int* p,指向常量int的指針,即int是常量,指針是變量; ??int* const p,指向變量int的常量指針,即int是變量,指針是常量。

三:const修飾的函數

const int fun1() //這個其實無意義,因為參數返回本身就是賦值;const int* fun2() //調用時 const int* pValue = fun2(); int* const fun3() //調用時 int* const pValue = fun2();

四:類中使用const

4.1 類成員變量

??表示類成員常量,不能被修改,同時它只能在初始化列表中賦值。

class Base { PRivate: const int data; //類成員常量public: Base(int x):data(x){} //列表初始化}

4.2 類成員函數

??const修飾類的成員函數,則該成員函數不能修改類成員變量調用類中任何非const成員函數。一般寫在函數的最后來修飾。

class Base { private: int data; public: Base(int x):data(x){} void func1() { ; } void func2()const { data = 1; //error } void func3()const { func1(); //error } }

五:因為我們是倔強的C++ Coder

??const修飾的變量不可改變,這是規定,但是在C++指針面前,一切皆有可能。看下面的代碼:

#include<iostream>using namespace std;int main(){ const int x = 1; int* p = (int*)&x; *p = 9; cout << x << endl; //1 cout << *P << endl; //9}

??代碼很簡單,我們利用指針p對常量x進行修改,輸出結果*p表明我們確實改變了x。但是存在疑問的是為什么輸出x還是1呢?這是因為,編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有存儲與讀內存的操作,使得它的效率很高。 文章轉自我的個人博客:http://www.61mon.com/index.php/archives/167/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 加查县| 辽中县| 轮台县| 鄱阳县| 黄梅县| 宜春市| 申扎县| 星子县| 伊吾县| 彝良县| 子洲县| 土默特右旗| 海丰县| 临泽县| 滨海县| 嘉兴市| 株洲市| 卢氏县| 仁寿县| 潮安县| 建瓯市| 秦皇岛市| 双流县| 江门市| 馆陶县| 那曲县| 普洱| 丰宁| 江山市| 成武县| 巴彦县| 永安市| 博客| 平顶山市| 安宁市| 屯留县| 丹寨县| 石屏县| 平顶山市| 黄石市| 阿鲁科尔沁旗|