15分鐘弄懂 const 和 define

2021-07-12 01:33:58 字數 1670 閱讀 6943

1. 什麼是const ?

const是c/c++中的乙個關鍵字(修飾符), const一般用來定義乙個常量, 既然叫做常量, 即以後再也不能修改其值.

const定義常量

2. 什麼是#define?

而define, 巨集定義, 則是一條預編譯指令, 編譯器在編譯階段會將所有使用到巨集的地方簡單地進行替換. 如下圖所示 :

巨集定義的替換

3. 他們有什麼用?

const 和 define 都能定義乙個常量, 都能實現修改值修改一次, 則所有用上該常量的地方都同步改值, 一句**都不用改.

使**更易維護

提高**的效率

4. 他們有什麼區別?

相同點

不同點

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝

const和define區別

編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率比巨集定義要高

既然巨集定義能做的事const都能做, 那巨集還有什麼存在的必要麼?

存在即合理, 既然巨集定義還沒被淘汰, 那必然有它存在的道理.

巨集能做到const不能辦到的事.

巨集定義高階功能

kstringcat(x, y) // 根據傳入的x和y拼接成字串

ktostring(x) // 根據傳入的x生成乙個字串

5. 應該怎麼用?

const有條原則, 那就是他右邊是什麼, 什麼就不可變, 如下

const不可變原則

用const修飾函式的形參, 則能提高**的安全性, 同時減少程式設計師之間的溝通成本

函式內部只能用x和y, 不能改

巨集多用於條件編譯, 如需要對於不同的情況執行不同的**塊, 則可以使用巨集的條件編譯來進行判斷

總結

在objective-c中, 隨處可見const常量, 所以大家應該大膽地使用const, 它會帶給你大大的益處. 同時, 只要某個資料是定義之後永遠都不需要也不能修改的, 請使用const!

5分鐘弄懂Docker

儘管之前久聞docker的大名了,但是天資愚鈍,對其到底是個啥東西一直摸不清,最近花了一段時間整理了一下,算是整理出一點頭緒來。官網的介紹是這樣的 那麼應用容器長什麼樣子呢,乙個做好的應用容器長得就好像乙個裝好了一組特定應用的虛擬機器一樣。比如我現在想用mysql那我就找個裝好mysql的容器,執行...

15分鐘了解Phoenix

以下部分翻譯自 phoenix為hbase穿上一層sql的外衣。所以你可以使用標準的jdbc api來建立表 插入資料 查詢hbase中的資料,而不是使用常規的hbase客戶端api。不會。跟原生的hbase客戶端相比,phoenix效能一樣好甚至更好,主要通過以下方式 除此之外,我們還做了一些工作...

15分鐘了解TiDB

2019年07月13日 22 21 49 d guco 閱讀數 77341 由於目前的專案把mysql換成了tidb,所以特意來了解下tidb。其實也不能說換,由於tidb和mysql幾乎完全相容,所以我們的程式沒有任何改動就完成了資料庫從mysql到tidb的轉換,tidb 是乙個分布式 news...