日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter03 第二节 const限定符的使用

發(fā)布時間:2024/9/5 编程问答 47 如意码农
生活随笔 收集整理的這篇文章主要介紹了 Chapter03 第二节 const限定符的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

3.2 const限定符

  • const的作用:替代#define作為有類型檢查的常量來使用。他的值被初始化后就固定了,成為一個只讀變量,不能更改。(推薦使用特殊的命名規(guī)范來區(qū)分常量和非常量)。
  • const的聲明:const type name = value。需要在聲明的時候賦值,如不賦值,那么常量的值是不確定的,并且無法修改。
  • const相對于#define的好處:
    • 有明確的類型
    • 可以嵌套進更復雜的類型
    • 可以限定使用區(qū)域

const用法擴展

面試一直會問道const的用法、原理等,索性趁回歸基礎總結(jié)一下。

  • const的基本作用:防止值被修改

  • 定義一個const對象const type name = value,聲明常規(guī)變量一定要初始化,上文已經(jīng)講過。在類中聲明一個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變量自身的修改來修改引用的結(jié)果,但是不能通過引用來修改,因為此時引用本身還是const類型的。
    • 非const引用應該指向非const變量
    • 非const變量只能綁定到同類型的引用中,const變量可以綁定不同但相關的類型。對于非const引用,類型不同不能綁定比較好理解。對于const引用,引用過程中會自發(fā)的進行類型的轉(zhuǎn)換。如double d = 3.14;const int &ref2 = d;,系統(tǒng)用int tmp = d;const int &ref2 = temp;來實現(xiàn)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 *p const修飾的是*p 這兩個是一個意思,就是指向int類型常量的指針,指針的地址(指向)是可以任意改的,但是不能通過指針來修改所指向的值,因為指向的是一個常量。
    • int * const p const直接修飾地址p,指的是p是一個常量指針,指向整型變量。p本身的地址(指向)是無法修改的,而p所指向的是一個變量值,是可以修改的。
    • int const int * const p; / int const * const p; 這個是上面兩者的結(jié)合,指針本身和指向的值都不能更改。
  • 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不能指向一個常量。它只是限制你的地址不能
改變而已。
*/

總結(jié)

以上是生活随笔為你收集整理的Chapter03 第二节 const限定符的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。