條款02:盡量以const,enum,inline替換#define
一、概述
盡量少用預處理器——宏替換
二、細節
1. 關於宏替換之常量
舊版本:#define N 10;
新版本:const int n = 10;
比較:#define不被視為語言的一部分,記號名稱N在編譯器開始處理源代碼之前就被預處理器移走了。
補充:class的專屬常量需要封裝性,而#define不能提供封裝性(它並不重視作用域)。
2. 形似函數的宏
舊版本:#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
新版本:template<typename T> inline void callWithMax(const T &a, const T &b) { f(a > b ? a : b); }
比較:舊版本中對於調用實參時有很大的約束,而且很復雜;而inline與它的效率相似但形式容易且不易出錯。
補充:callWithMax是個真正的函數,它遵守作用域和訪問規則;而你不能用宏寫一個class的private成員函數。
3. enum的成員是const的,故可作為常量表達式
條款02:盡量以const,enum,inline替換#define
相關推薦
條款02:盡量以const,enum,inline替換#define
版本 fin all 作用域 inline 容易 amp oid def 一、概述 盡量少用預處理器——宏替換 二、細節 1. 關於宏替換之常量 舊版本:#define N 10; 新版本:const int n = 10; 比較:#define不被視為語言的一部分,記
條款2:盡量以const,enum,inline替換#define
static 處理 沒有 作用域 def sco 編譯器 常量指針 聲明式 1.#define不被視為語言的一部分,並且使用常量會比#define導致較小的碼 2.常量替換#define的兩種情況 定義常量指針(當指針所指物為常量時,應該有兩個const),const
Effective_C++ (條款02) 盡量以 const,enum,inline替換 #define
strong 進入 all bsp 一個 int vat 必須 缺點 條款可以改為——寧可以編譯器替換預處理器,因為 #define 可能不被視為語言的一部分 #define ASPECT_RATIO 1.653 解決之道是以一個常量替換宏(#define)
Effective C++筆記之二:儘量以const、enum、inline替換#define
一.#define定義的類似函式的巨集,使用時易出錯 缺點描述 這樣做的初衷是,巨集看起來像函式,但不會招致函式呼叫(function call)帶來的額外開銷。但即使你為所有實參加上小括,仍然會在使用時遭遇麻煩。舉個例子: // 求兩個變數中最大的那個 #define THE_MAX(a, b)
《Effective C++》讀書筆記 條款02 盡量以const,enum,inline替換#define
之前 不同的 可執行 effective play fec b+ num mtu Effective C++在此條款中總結出兩個結論 1.對於單純常量,最好以const對象或enum替換#define 2.對於形似函數的宏,最好改用inline函數替換#defi
條款2:儘量以const,enum,inline替換#define
這一條款也被稱作:寧可用編譯器替換前處理器。對於一般用#defined定義的常量,可以使用const型別代替。但是要注意兩種特殊情況:假如我們要在標頭檔案中定義一個不能被修改的字串,那麼需要使用const char* const型別的指標: char a = 'A'; ch
條款02:儘可能使用const, enum, inline替代define
(1)#define ASPEC_RATIO 1.653 替代為: constdouble AspectRatio = 1.653; 因為define名稱ASPEC_RATIO也許從未被編譯器看見,那麼她就沒有進入記號表,那麼在獲取錯誤資訊的時候,就可能浪費時間去獲得1.6
條款03:儘可能的使用const
1. //過載operator[]並對不同版本給予不同的返回型別; class TextBlock { public: const char& operator[](std::size_t position) const { return
讀《More Effective C++35個改善程式設計與設計的有效方法》之條款3:絕對不要以多型方式處理陣列
有以下程式: <pre name="code" class="cpp">class Base { public: Base(int n = 0) : _b(n) {} int _b; }; class Devide : public Base { publ
《Effective c++》 條款3:儘可能的使用const
const就是常量的意思,如果你做過題,你應該會碰過下面的物種情況,沒碰到也沒關係,看看區中有什麼區別? char greeting []="hello"; char *p=greeting; //non-const poi
effective c++條款20:寧以pass-by-reference-to-const替換pass-by-value
1. 更高效 考慮如下的一個base class和derived class: class Base { private: std::string name; std::string address; public: Base(){} ~Base(){}
Effective c++ 條款20:寧以pass-by-reference-to-const替換pass-by-value
1、預設情況下c++以by value方式傳遞物件至(或來自)函式 除非你另外指定,否則函式引數都是以實際實參的復件(副本)為初值,而呼叫端所獲得的也是函式返回值的一個復件。這些復件由物件的copy建構函式產出,這也可能使得pass-by-value成為
條款6:不想使用編譯器自動生成的函數,就要明確拒絕!
但是 con public col 調用 operator 聲明 接受 錯誤 每一個對象都是獨一無二的,如果不想其被復制,我們就希望其復制以失敗收場。如一座房屋出售HomeForSale類: 1 HomeForSale h1; 2 HomeForSale h2; 3 Ho
練習:編寫循環,讓用戶輸入內容,判斷輸入的內容以alex開頭的,則將該字符串加上_SB結尾
sed with 輸入 close lose highlight lex 字符串 用戶輸入 編寫循環,讓用戶輸入內容,判斷輸入的內容以alex開頭的,則將該字符串加上_SB結尾 while True: user = input(‘請輸入:‘)
關於變量聲明的var,let,const
報錯 不存在 com 輸出 ges 操作 之前 alt 沒有 在js中,用var聲明的話,在同一個作用域的範圍內會存在聲明提前的情況,舉個例子: 按常理來說,我們此時需要的b應該輸出的是 not defined 才對,但是實際上並沒有,因為var
使用php寫出一個驗證碼圖片,由於寬度被定死了,所以操作起來不太方便,之後盡量寫靈活,成為一個可調用的函數。
新手 put 由於 -type draw cat 驗證 font 寬度 <?php // Due to the height and width of the captcha image is fixed, not so easy to use, change
重構改善既有代碼設計--重構手法02:Inline Method (內聯函數)& 03: Inline Temp(內聯臨時變量)
臨時變量 替代 xtra 移動 get replace 16px ber ble Inline Method (內聯函數) 一個函數調用的本體與名稱同樣清楚易懂。在函數調用點插入函數體,然後移除該函數。 int GetRating()
02:第二次作業,APP案例分析
mob 劇情 界面 騰訊 軟件 經歷 -name 推廣 人民幣 產品:王者榮耀 理由:現中國最火的手遊,沒有之一。 一、調研 上手體驗: 作為一款手機端的MOBA遊戲,王者榮耀給我的第一印象是遊戲的操作性、流暢度和界面都做得很好。通常,MOBA類的遊戲我只在電腦上玩過,
課程作業02:將課程中的所有動手動腦的問題以及課後實驗性的問題,整理成一篇文檔。
運算符 示例 turn 整理 .cn 輸出結果 ole 輸出 兩個 問題1:一個Java類文件中真的只能有一個公有類嗎?請使用Ecplise或javac檢測一下以下代碼,有錯嗎? 一個java類文件中只能有一個公有類。用Ecplise測試,當public類嵌套在publi
Python基礎知識之:hello world,註釋,變量,數據類型
我們 重要 一個 yield code oba () turn 編程語言 從接觸編程語言以來,在我腦海裏經常有三個問號: 這是什麽? 這個有什麽用? 這個怎麽用? 我覺得初學一個東西,把這三個問號都搞明白,那麽剩下的就是孰能生巧的過程了,在接下來的博客中,每個知