歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的const 心得

C++中的const 心得

日期:2017/3/1 9:06:57   编辑:Linux編程

一,C++中const的基本知識

1.C++中const的基本概念

  1.const是定義常量的關鍵字,表示只讀,不可以修改。

  2.const在定義常量的時候必須要初始化,否則報錯,因為常量無法修改,只能在定義的時候才可以進行初始化。

2.C++中const的基本用法

# include<iostream>

int main()
{
// 表示一個整數常量
const int a = 10;

// 表示一個整數常量
int const b = 20;

// 必須在定義定義常量的時候立即進行初始化
// int const c; 該語句報錯,因為未進行初始化

// 表示該指針指向的是一個常量,該指針是一個變量。不可以通過指針間接修改常量的值
const int * c;
c = &a;
// *c = 100; 該語句錯誤,在C++中不允許通過指針間接修改常量的值(在C中是可以的)

// 表示一個常指針,該指針是一個常量,必須要立即初始化,該指針的值一旦初始化就不允許再修改
int d = 100;
int f = 200;
int * const e = &d;
// e = &f; 該語句錯誤,因為常指針不允許修改

// 表示一個指向常量的常指針,該常指針的值不允許修改,該常指針指向的內存空間的值也不允許修改
const int * const g = &d;
// g = &f; 該語句錯誤,常指針不允許被修改
// *g = 20; 該語句錯誤,因為該指針指向的是一個常量,無法間接修改該值

return 0;
}

3.const的易混點的區分以及作函數參數的好處

  1.const的易混點

    1.常指針:該指針變量是常量,因此叫做常指針,例如:int * const tmp = &a;

    2.指向常量的指針:該指針是變量,但是指向的內存空間是常量的內存空間,不允許通過間接賦值的方式改變該內存空間的值。例如:const int * tmp = &b;

    3.指向常量的常指針:該指針是常量,該指針指向的內存空間也是常量,即不允許修改指針的值,也不允許間接修改指針指向內存空間的值,例如:const int * const tmp = &b;

  2.const作函數參數的好處

    1.清楚的區分參數是輸入還是輸出。

    2.保護原始數據不被函數內部修改,例如:void setName(const char * name);

二,C++的const的原理

1.C語言中的冒牌貨-const

  1.C語言中的const是可以通過指針間接賦值的方式改變常量的值,因此C語言中的const是允許被修改,不是真正意義上的常量。因此是冒牌貨。

2.C++編譯器對const的處理

  1.C++的編譯器碰見常量聲明的時候,會在符號表中把該常量放進去。

  2.編譯過程中若發現使用常量,則直接以符號表中的值進行替換。

  3.編譯過程中若發現對常量進行了&地址操作,則為該常量分配內存空間(兼容C)。

  4.C++編譯器雖然可能為常量分配內存空間,但不會使用其存儲空間中的值。

三,const和#define的區別

1.兩者的區別

  1.C++中的const類似於宏定義。

  2.C++中的const是由編譯器進行處理的,提供類型檢查和作用域檢查。宏定義是由預處理器處理,單純的文本替換而已。

Copyright © Linux教程網 All Rights Reserved