const用法的總結

來源:互聯網
上載者:User

一.const類型的變數在聲明的時候一定要進行初始化,否則會報錯。

二.在全域範圍中定義非const對象,它在整個程式中都可以訪問
例如:
//file1.cc
int counter;
//file2.cc
extern int counter;
++counter;

在全域範圍中定義const變數意味著這個變數是該檔案的局部變數,需要通過制定變數類型為extern,才可以在整個程式中使用該變數。
例如:
//file1.cc
extern const int counter=0;
//file2.cc
extern const int counter;
++counter;

三.const應用和非const引用
非const引用只能綁定到與該參考型別一致的變數上,並且不可以初始化為右值。
例如:
double a=1.22;
int &b=a;  //錯誤
double &c=a; //正確
int r=10;
int &d=r+55; //錯誤 
因為編譯器會把代碼進行轉化:
int temp=a;
int &b=temp;
也就是說b綁定的不是a,而是temp,這樣嘗試通過b來改變a是不可能成功的,所以這樣是不合法的。

const引用則可以綁定到不同的類型上或者綁定右值。
例如:
double a=1.22;
const int &b=a;  //正確
const double &c=a; //正確
int r=10;
const int &d=r+55; //正確

四.指向const的指標
例如:
double a=1.01;
const double * b=&a;
*b=2.1; //這顯然是錯誤的
a=2.1; //這是正確的,a和*b的值都會變成2.01,有些人將之稱為自以為指向const的指標

五.const指標
例如:
int a=10;
int * const b=&a; //這意味著b只能指向a
a=20;
*b=30; //上面兩句均可以改變變數的值。

另外和第四條有關係,並且比較有意思的是:
typedef int * pint;
int value=10;
const pint a=&value;
pint const b=&value;
int * const c=&value; //3句話的效果是一致的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.