程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ const 的全面總結,const全面總結

C++ const 的全面總結,const全面總結

編輯:C++入門知識

C++ const 的全面總結,const全面總結


 

C++中的const關鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,本人根據各方面查到的資料進行總結如下,期望對朋友們有所幫助。

Const 是C++中常用的類型修飾符,常類型是指使用類型修飾符const說明的類型,常類型的變量或對象的值是不能被更新的。

No.

作用

說明

參考代碼

1

可以定義const常量

const int Max = 100;

2

便於進行類型檢查

const常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查,而對後者只進行字符替換,沒有類型安全檢查,並且在字符替換時可能會產生意料不到的錯誤

void f(const int i) { .........}
//對傳入的參數進行類型檢查,不匹配進行提示

3

可以保護被修飾的東西

防止意外的修改,增強程序的健壯性。

void f(const int i) { i=10;//error! }
//如果在函數體內修改了i,編譯器就會報錯

4

可以很方便地進行參數的調整和修改

同宏定義一樣,可以做到不變則已,一變都變

5

為函數重載提供了一個參考

class A
{
......
void f(int i) {......} //一個函數
void f(int i) const {......} //上一個函數的重載
......
};

6

可以節省空間,避免不必要的內存分配

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

#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此時並未將Pi放入ROM中
......
double i=Pi; //此時為Pi分配內存,以後不再分配!
double I=PI; //編譯期間進行宏替換,分配內存
double j=Pi; //沒有內存分配
double J=PI; //再進行宏替換,又一次分配內存!

7

提高了效率

編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高

int const *p =&a; //等價const int *p =&a;   //指針所指值是常量 , p可以修改

int * const p ;   //指針是常量,所指向的值可以修改
 
復制代碼
class WORK
{
public:
     const int NUM;
    int a;
    WORK():NUM(3)   //const var must init in init_list
    {
        a=1;
    }
    void change()
    {
        a =2;
    }
    void disp()const
    {
        cout<<"const NUM="<<NUM<<endl;
        //change();  //const function can not call non_function
        //a=3;  const function can not modify member variable
    }
};
復制代碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved