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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1、 # define A 1.6

寧可使用編譯器也不使用預處理,原因:
當使用預處理時,記號名稱A也許從未被編譯器看見(因為預處理是在編譯階段進行替換),所以一旦出現編譯錯誤,(如果A被定義在一個非你寫的頭文件內),你肯定對1.6以及它的來源毫不知情,這樣就會因為追蹤它而浪費時間。
因此—>用const替換不會發生這種情況(找編譯錯誤難找的情況)。
# define不能進行安全性類型檢查

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

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

【總結】
對于單純常量,最好用const、enum替換#define
對于形似函數的宏,最好用inline函數替換#define

總結

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

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