const和#define

(1)const和#define都可以定義常量,但是const用途更廣。

(2)const 常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進行類型安全檢查。而對后者只進行字符替換,沒有類型安全檢查,并且在字符替換可能會產(chǎn)生意料不到的錯誤。

(3) 有些集成化的調(diào)試工具可以對const 常量進行調(diào)試,但是不能對宏常量進行調(diào)試

  1. 什么是const ?

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

const定義常量

  1. 什么是#define?

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

宏定義的替換

  1. 他們有什么用?

const 和 define 都能定義一個常量, 都能實現(xiàn)修改值修改一次, 則所有用上該常量的地方都同步改值, 一句代碼都不用改.
使代碼更易維護
提高代碼的效率

  1. 他們有什么區(qū)別?

相同點

都能定義常量
不同點

const定義常量從匯編的角度來看,只是給出了對應的內(nèi)存地址,而不是象#define一樣給出的是立即數(shù),所以,const定義的常量在程序運行過程中只有一份拷貝,而#define定義的常量在內(nèi)存中有若干個拷貝

const和define區(qū)別

編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內(nèi)存的操作,使得它的效率比宏定義要高

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

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

宏能做到const不能辦到的事.

宏能定義函數(shù)
OC的單例模式用到宏
宏還能根據(jù)傳入的參數(shù)生成字符串, 如下

宏定義高級功能

kStringCat(x, y) // 根據(jù)傳入的x和y拼接成字符串
kToString(x) // 根據(jù)傳入的x生成一個字符串

  1. 應該怎么用?

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

const不可變原則

用const修飾函數(shù)的形參, 則能提高代碼的安全性, 同時減少程序員之間的溝通成本

函數(shù)內(nèi)部只能用x和y, 不能改

宏多用于條件編譯, 如需要對于不同的情況執(zhí)行不同的代碼塊, 則可以使用宏的條件編譯來進行判斷

總結

在Objective-C中, 隨處可見const常量, 所以大家應該大膽地使用const, 它會帶給你大大的益處. 同時, 只要某個數(shù)據(jù)是定義之后永遠都不需要也不能修改的, 請使用const!

原文鏈接:https://blog.csdn.net/u011217834/article/details/89485670

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容