程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 《Effective C++》讀書筆記02:用const,enum,inline減少#define出場機會

《Effective C++》讀書筆記02:用const,enum,inline減少#define出場機會

編輯:關於C++

以前學習c語言時,老師教導我們,對於數字最好用宏(#define)來定義它。以至於 一直習慣於#define Age 12這樣的寫法。

在c語言的環境中,這確實是增加程序可讀性的有效做法,可是在c++中,可以有更優 美的實現方式。

1.當你寫下

#define NUMBER 11.12

如果接下來使用NUBMER時出現了編譯錯誤,那麼由於在預處理過程中NUMBER已經被替 換為11.12了,編譯器指出錯誤發生在11.12上,如果使用者不是你,肯定會對11.12感到 莫名其妙,要花不少時間追蹤它。

替換方法有:

const double Number = 11.12;

這樣一來,錯誤定位肯定沒有問題了,而且如果多次使用這個常量,宏替換會產生多 份11.12,而後者保證只有一個副本。

2.我以前寫過這樣的宏替換代碼:

#define MAX(a, b) ((a) > (b) ? (a):(b)) //得到兩個數中的最大值

在每個變量外都加了括號以後,使用起來確實沒碰到過什麼問題。可是作者這樣使用 這個函數:

int a = 5, b = 0;
MAX(++a, b); //a會被遞增兩次
MAX(++a, b+10); //由於b+10>a,a只被遞增一次!!

會出現很大的問題!

在c++中,可以使用inline函數來解決:

template <typename T>
inline T MAX(const T& a, const T&b)
{
  return a > b ? a : b;
}

使用reference-to-const可以確保不對對象進行修改;而inline函數本身可以在編譯 時進行優化,提高編譯速度。

Note:

1.對於一般常量,最好用const和enum替換#define;

2.對於類似函數的宏,最好改用inline函數替換#define。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved