C++与C中const的比较以及const和define的比较
生活随笔
收集整理的這篇文章主要介紹了
C++与C中const的比较以及const和define的比较
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C++與C中const的比較:
C語言中 const修飾的變量是一個 常變量,本質(zhì)還是變量,有自己的地址空間C++編譯器對const常量的處理 當碰見常量聲明時,在符號表中放入常量 ==> 問題:那又如何解釋取地址編譯過程中若發(fā)現(xiàn)對const使用了extern或者&操作符,則給對應(yīng)的常量分配存儲空間(兼容C) 但是編譯過程中若發(fā)現(xiàn)使用常量則直接以符號表中的值替換,即使給該常量分配了空間,也并不使用里面的值#include <stdio.h>// 建議用 const 常量 代替宏常量 // define 宏 在預編譯的時候進行處理 const 是在編譯的時候進行處理的 // 宏做簡單替換,不會進行類型檢查,作用域的檢查 void func4_1() { // 宏的作用域從定義的那個位置開始,到文件結(jié)束都可見,可以使用 #define A 100// const 常量的作用 在當前的 {}之內(nèi)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 分配內(nèi)存// 但是這個內(nèi)存并不會被 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; }總結(jié)
以上是生活随笔為你收集整理的C++与C中const的比较以及const和define的比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 15crmo焊接后多长时间探伤_3分钟g
- 下一篇: C++ 中 new 操作符内幕:new