C++:define和const的區別

define和const的區別

  1. define定義的常量是沒有類型的,如#define MAX 255,編譯器只是把定義的變量名和變量值對應起來;const定義的常量是有類型的,存放在靜態區中,如const float MAX = 255;。也正是因爲define無類型,所以沒有類型安全的檢查就有可能會有意想不到的錯誤,而const會在編譯的時候進行類型檢查
  2. define定義的變量是在預編譯的時候完成的,只要程序中用到該變量的地方都要進行拷貝替換,內存消耗較大;const定義的變量在編譯時確定它的值,只有一次拷貝。所以宏定義在程序中所消耗的內存要比const變量大得多
  3. define定義的常量是不可以用指針變量去指向的;const定義的常量是可以用指針指向該常量的地址
  4. define可以定義一些簡單的函數;const不可以定義函數
  5. 編譯器一般不給const常量分配存儲空間,而是把它們保存在符號表中,這使得它成爲一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高。
  6. 宏替換隻做替換,不做計算,不做表達式求解
  7. 宏定義的作用範圍僅限於當前文件。const在默認情況下是在當前文件內有效,當多個文件中出現了同名的const變量時,等同於在不同文件中分別定義了獨立的變量。如果想在多個文件中共享同一個const對象,那麼必須在變量定義之前添加extern關鍵字(聲明和定義的時候都要加)
發佈了148 篇原創文章 · 獲贊 57 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章