c/c++中const用法總結

來源:互聯網
上載者:User
const類型定義:指明變數或對象的值是不能被更新,引入目的是為了取代先行編譯指令

**************常量必須被初始化*************************

cons的作用
(1)可以定義const常量 例如:
const int Max=100;
int Array[Max];
(2)便於進行類型檢查 例如:
void f(const int i) { .........}
編譯器就會知道i是一個常量,不允許修改;
(3)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。
還是上面的例子,如果在函數體內修改了i,編譯器就會報錯;
例如:
void f(const int i) { i=10;//error! }
(5) 為函數重載提供了一個參考。
class A
{
......
void f(int i) {......} file://一個函數
void f(int i) const {......} file://上一個函數的重載
......
};
(6) 可以節省空間的,避免不必要的記憶體配置。
例如:
#define PI 3.14159 file://常量宏
const doulbe Pi=3.14159; file://此時並未將Pi放入ROM中
......
double i=Pi; file://此時為Pi分配記憶體,以後不再分配!
double I=PI; file://編譯期間進行宏替換,分配記憶體
double j=Pi; file://沒有記憶體配置
double J=PI; file://再進行宏替換,又一次分配記憶體!
const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式運行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝。
(7) 提高了效率。
編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

使用const
(1)修飾一般常量,常數組,常對象
   修飾符const可以用在類型說明符前,也可以用在類型說明符後。 例如:
int const x=2;  或  const int x=2;

   int const a[5]={1, 2, 3, 4, 5}; 或 const int a[5]={1, 2, 3, 4, 5};

class A;  const A a; 或 A const a;
  
(2)修飾指標
const int *A; 或 int const *A; //const修飾指向的對象,A可變,A指向的對象不可變
int *const A;   //const修飾指標A, A不可變,A指向的對象可變
const int *const A; //指標A和A指向的對象都不可變
(3)修飾引用
   const double & v; 該引用所引用的對象不能被更新
 (4)修飾函數的傳回值:
const修飾符也可以修飾函數的傳回值,是傳回值不可被改變,格式如下:
const int Fun1();
const MyClass Fun2();
(5)修飾類的成員函數:
const修飾符也可以修飾類的成員函數,格式如下:
class ClassName
{
public:
   int Fun() const;
  .....
};
這樣,在調用函數Fun時就不能修改類裡面的資料
(6)在另一串連檔案中引用const常量
extern const int i; //正確的引用
extern const int j=10; //錯誤!常量不可以被再次賦值

*******************放在類內部的常量有什麼限制?

class A
{
private:
const int c3 = 7; // err
static int c4 = 7; // err
static const float c5 = 7; // err
......
};
初始化類內部的常量
1 初始化列表:
class A
{
public:
A(int i=0):test(i) {}
private:
const int i;
};
2 外部初始化,例如:
class A
{
public:
A() {}
private:
static const int i;
};
const int A::i=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.