Chapter03 第二节 const限定符的使用
生活随笔
收集整理的這篇文章主要介紹了
Chapter03 第二节 const限定符的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3.2 const限定符
- const的作用:替代
#define作為有類型檢查的常量來使用。他的值被初始化后就固定了,成為一個只讀變量,不能更改。(推薦使用特殊的命名規范來區分常量和非常量)。 - const的聲明:
const type name = value。需要在聲明的時候賦值,如不賦值,那么常量的值是不確定的,并且無法修改。 - const相對于#define的好處:
- 有明確的類型
- 可以嵌套進更復雜的類型
- 可以限定使用區域
const用法擴展
面試一直會問道const的用法、原理等,索性趁回歸基礎總結一下。
const的基本作用:防止值被修改
定義一個const對象:
const type name = value,聲明常規變量一定要初始化,上文已經講過。在類中聲明一個const成員只能使用初始化列表進行初始化。const的作用域: const默認的作用域是本文件。他能被本文件的對象訪問,但只存在本文件中,不能被其他文件訪問。如果想要在其他文件中也訪問到這個const變量,需要在定義的時候加
extern聲明。如extern const x = a。在其他文件中使用extern const x進行訪問。對于非const變量,定義時默認是extern類型的,const要額外聲明。const引用:const引用是指向const對象的引用。
- (非const引用無法引用const變量)由于const對象是不能修改的,如果使用
int &ref = i,而i又是一個const變量,從引用上來說可以使用ref來修改i的值的,而i又不能修改,所以這里是非法的。 - (const引用本身不能修改)const修飾的引用是也是一個常量,這個引用是不能更改的。
- (const引用的對象是可以修改的)const引用可以指向非const變量,通過非const變量自身的修改來修改引用的結果,但是不能通過引用來修改,因為此時引用本身還是const類型的。
- 非const引用應該指向非const變量
- 非const變量只能綁定到同類型的引用中,const變量可以綁定不同但相關的類型。對于非const引用,類型不同不能綁定比較好理解。對于const引用,引用過程中會自發的進行類型的轉換。如
double d = 3.14;const int &ref2 = d;,系統用int tmp = d;const int &ref2 = temp;來實現const綁定類型不同的變量。
- (非const引用無法引用const變量)由于const對象是不能修改的,如果使用
const引用示例代碼:
const int test1 = 1;
const int test2 = 2;
int test3 = 3;
int test4 = 4;
int &ref = test3;
ref += 1;
cout << test3 << endl;
//1.引用修改非const對象的值
const int &t1 = test1;
cout << t1 << endl;
// 2.t1 = test2; 報錯,const引用無法修改(read only)
const int &t3 = test3;
cout << t3 << endl;
test3 += 1;
cout << t3 << endl;
// t3 += 1; // 錯誤,引用本身無法修改
// 3.可以指向非const變量,非const變量可以修改。
// 4.int &t4 = test2; 報錯,非const引用無法指向const常量
double test5 = 5.0;
// int &t5 = test5; 報錯,無法用 "double" 類型的值初始化 "int &" 類型的引用
const int &t5 = test5;
cout << t5 << endl;
// 5. 非const變量只能綁定到同類型的引用中,const變量可以綁定不同但相關的類型
const指針:const指針廣義上來講,是帶有const關鍵字的指針變量,主要有下面三種:
const int * p / int const *pconst修飾的是*p這兩個是一個意思,就是指向int類型常量的指針,指針的地址(指向)是可以任意改的,但是不能通過指針來修改所指向的值,因為指向的是一個常量。int * const pconst直接修飾地址p,指的是p是一個常量指針,指向整型變量。p本身的地址(指向)是無法修改的,而p所指向的是一個變量值,是可以修改的。int const int * const p; / int const * const p;這個是上面兩者的結合,指針本身和指向的值都不能更改。
const指針示例代碼:
int a = 10;
const int b = 20;
const int *p = &a;
const int *q = &b;
// *p = 11; 報錯,不能通過指針修改。
cout << *p << " - " << *q << endl;
q = p;
a = 30;
cout << *p << " - " << *q << endl;
/* 解釋:
const int *q 指的是指向的地址可以改,指向的值不能改(*p=11非法).
const 修飾的目標是int *q,也就是q所指向的值,所以再給q賦值是非法的。
const int *q可以指向變量或常量,然而不能通過q這個指針去修改指向的值,
但是如果指向的是一個變量,變量本身是可以重新賦值的,只是不能通過指針去修改。
*/
int *const x = &a;
// int *const y = &b; 報錯,不能指向常量
int c = 11;
// x = &c; 報錯,常量地址不能修改
cout << *p << " - " << *q << endl;
/* 解釋:
int * const x 表示x地址是一個常量,它必須指向一個固定的地址。但是地址里面
的值是可以改變的,所以int * const x不能指向一個常量。它只是限制你的地址不能
改變而已。
*/
總結
以上是生活随笔為你收集整理的Chapter03 第二节 const限定符的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RestTemplate发起http请求
- 下一篇: session 、cookie、toke