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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

尽量使用const、enum、inline代替#define

發(fā)布時(shí)間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 尽量使用const、enum、inline代替#define 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、 # define A 1.6

寧可使用編譯器也不使用預(yù)處理,原因:
當(dāng)使用預(yù)處理時(shí),記號(hào)名稱A也許從未被編譯器看見(因?yàn)轭A(yù)處理是在編譯階段進(jìn)行替換),所以一旦出現(xiàn)編譯錯(cuò)誤,(如果A被定義在一個(gè)非你寫的頭文件內(nèi)),你肯定對(duì)1.6以及它的來源毫不知情,這樣就會(huì)因?yàn)樽粉櫵速M(fèi)時(shí)間。
因此—>用const替換不會(huì)發(fā)生這種情況(找編譯錯(cuò)誤難找的情況)。
# define不能進(jìn)行安全性類型檢查

【 知識(shí)點(diǎn)1】
在頭文件內(nèi)定義一個(gè)常量不變的字符串有兩種方式:
const char* const str = “String”;
const string str(String); //一般選這種形式
【 知識(shí)點(diǎn)2】static const
用作類內(nèi)部static const的初始化問題:
①只有static const int類型的常量才能在類內(nèi)進(jìn)行聲明和初始化;
②非static const int類型,使用:類內(nèi)聲明,類外初始化形式。
2、enum的引出原因
如果你的編譯器不允許使用“const static int class常量”完成類內(nèi)初始化設(shè)定,而且編譯器堅(jiān)持必須在編譯器期間知道數(shù)組的大小,可改用enum。
理論基礎(chǔ):一個(gè)屬于枚舉類型的數(shù)值可全充ints被使用。
“`
class A
{
enum { size = 5 };//令Numturns成為 5 的一個(gè)記號(hào)名稱
int array[size]; //這樣就沒有問題了
}
/*說明:enum的行為某方面說比較像#define而不像const,有時(shí)候這正是你想要的。例如:取一個(gè)const的地址是合法的,取一個(gè)enum的地址是不合法的,而取一個(gè)#define的地址通常是不合法的。
【因此】—>如果你不想讓別人的指針或者引用指向你的某個(gè)整數(shù)常量,enum可以幫助你實(shí)現(xiàn)這個(gè)約束。此外,enum和#define絕對(duì)不會(huì)導(dǎo)致非必要的內(nèi)存分配*/

3、inline函數(shù)的引出
# define CALL_BACK(a,b) f((a)>(b)?(a):(b))
無論何時(shí)都要記住:必須為宏中的所有實(shí)參加上小括號(hào);
但是即便這樣做,有時(shí)候錯(cuò)誤也難以避免。

【總結(jié)】
對(duì)于單純常量,最好用const、enum替換#define
對(duì)于形似函數(shù)的宏,最好用inline函數(shù)替換#define

總結(jié)

以上是生活随笔為你收集整理的尽量使用const、enum、inline代替#define的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。