日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

初识C++之剖析const与#define

發布時間:2024/9/27 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初识C++之剖析const与#define 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、 編譯器處理方式不同
  #define是一個宏定義命令,它是在預處理階段就進行了替換;
  const修飾的是一個編譯時常量,它是在編譯階段處理的。
2、 類型和安全檢查不同
  #define定義的標識符僅僅是產生文本替換,不管內容是否正確;
  const修飾的符號是一個具有類型的符號,編譯器在編譯時會對其做嚴格的檢查。
3、書寫方式不同
  #define是一個預處理命令,結束時沒有分號;
  const定義常量是一個說明語句,以分號結束。
  
4、 存儲方式不同
  #define宏僅僅是展開,有多少地方使用,就展開多少次,不會分配內存。
  const常量會在內存中分配(可以是堆中也可以是棧中)。
5、const 可以節省空間,避免不必要的內存分配。
例如:
  #define PI 3.14159 //常量宏
  const doulbe Pi=3.14159; //此時并未將Pi放入內存中 ……
  double i=Pi; //此時為Pi分配內存,以后不再分配!
  double I=PI; //編譯期間進行宏替換,分配內存
  double j=Pi; //沒有內存分配
  double J=PI; //再進行宏替換,又一次分配內存!
  
  const定義常量從匯編的角度來看,只是給出了對應的內存地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程序運行過程中只有一份拷貝,而 #define定義的常量在內存中有若干個拷貝。
6、作用域
  #define定義的常量,盡管在某個函數內,但他的作用域是從定義開始,直到遇到#undef取消其定義為止,要是不取消,就會直到文件結束;
  const定義的變量,要是在函數內,那么它的作用域就是它定義開始,到它所在的復合語句結束為止。
7、提高了效率。
  編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。
8、 調試
  有些集成化的調試工具可以對const常量進行調試,但是不能對#define修飾的宏常量進行調試。

總結

以上是生活随笔為你收集整理的初识C++之剖析const与#define的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。