Xcode學習C++(三、const)

來源:互聯網
上載者:User

標籤:

const可以限定一個變數的值不允許被改變,使用const在一定程度上可以提高程式的安全性和可靠性

const int a = 10;

變數a的值是不能被修改的,永遠都是初值10

int const a = 10;跟上述寫法是等價的

 

void sum(const int a, const int b)

上面的函數可以防止別人篡改形參的值

可以看出,const可以用來定義一個常量。作用跟enum、#define類似

下面的例子表示p是個常量,不能再給p賦值,不能讓p再指向其他變數

int a = 10;

int * const p = &a;

 

下面的例子表示*p是個常量,不能通過*p來修改變數a的值

int a = 10;

const int *p = &a;

下面的例子可以防止test函數的形參a指標修改外面age變數的值

void test(const int * a);

int age = 10;

test(&age);

 

下面的例子表示*p和p都是常量

int a = 10;

const int * const p = &a;

 

const和#define

const和#define都能用來定義常量,可以造成一改全部跟著一起改的效果

實際上,更推薦使用const或者enum來定義常量

const推出的初始目的,正是為了取代先行編譯指令,消除它的缺點,同時繼承它的優點

const可以節省空間的,避免不必要的記憶體配置。舉例:

#define PI1 3.14159 // 常量宏

const double PI2 = 3.14159; // 此時並未將Pi放入RAM中

double a = PI2; // 此時為Pi分配記憶體,以後不再分配!

double b = PI1; // 編譯期間進行宏替換,分配記憶體

double c = PI2; // 沒有記憶體配置

double d = PI1; // 再進行宏替換,又一次分配記憶體!

  const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式運行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝

 

#define的副作用

#define有時候會產生一些不好的副作用,比如下面的例子:

// MAX宏返回兩個數值中的最大值

#define MAX(x, y) ((x) > (y) ? (x) : (y))

int a = 10;

int b = 6;

int c = MAX(++a, b);

cout << "c = " << c << ", a = " << a << endl; 

這時候的輸出結果是:c = 12, a = 12

 

如果將變數b的初值改為15,也就是int b = 15;

這時候的輸出結果是:c = 15, a = 11

 

#define的特殊用途

#define還是有它無可取代的地方,比如

傳入一個參數,然後產生字串

#define TO_STR(x) #x

cout << TO_STR(abcd) << endl;

 

串連多個參數,合成一個完整的標識符

#define CONCAT(x, y) x##y

int myage = 20;

cout << CONCAT(my, age) << endl;

Xcode學習C++(三、const)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.