C++與C中const的比較:
C語言中 const修飾的變量是一個 常變量,本質還是變量,有自己的地址空間C++編譯器對const常量的處理
當碰見常量聲明時,在符號表中放入常量 ==> 問題:那又如何解釋取地址編譯過程中若發現對const使用了extern或者&操作符,則給對應的常量分配存儲空間(兼容C)
但是編譯過程中若發現使用常量則直接以符號表中的值替換,即使給該常量分配了空間,也并不使用里面的值#include <stdio.h>// 建議用 const 常量 代替宏常量
// define 宏 在預編譯的時候進行處理 const 是在編譯的時候進行處理的
// 宏做簡單替換,不會進行類型檢查,作用域的檢查
void func4_1()
{
// 宏的作用域從定義的那個位置開始,到文件結束都可見,可以使用
#define A 100// const 常量的作用 在當前的 {}之內const int b = 20;printf ("%d\n", A);printf ("b = %d\n", b);// 撤銷宏定義,如果不撤銷,宏可以一直使用
#undef A
}int main4_2()
{//printf ("b = %d\n", b);// func4_1();// printf ("%d\n", A);return 0;
}int main4_1()
{ // C++中用 const 來定義常量const int a = 10;// a = 20;// C++中常量放在一個常量表中// 當編譯器檢測到要const常量進行取地址操作,它會為 a 分配內存// 但是這個內存并不會被 a 使用int *p = (int *)&a;*p = 100;printf ("&a = %p, p = %p\n", &a, p);// const 常量 a 并不會使用分配它的空間,使用 a 的時候,用常量表中的值進行替換printf ("a = %d, *p = %d\n", a, *p);return 0;
}