#define Max(a, b) (a)>(b) ? (a) : (b)
//在遇到Max(++a, b )這樣的調用的時候,總會帶來副作用.但我們又總想宏定義帶來的效率,該怎麼辦呢? inline
..
template<typename T>
inline T Max(const T& a, const T& b)
{
return a > b ? a : b;
}
一.視C++爲一個語言聯邦
其實也就是說C++組成,包括四部分:
1. c語言;
2. Object-Oriented C++,即面向對象,什麼封裝,繼承和多態等等;
3. Template C++;
4. STL;
二.儘量以const enum inline替換#define
1. const 與 #define
#define AspectRatio 1.653
const double AspectRatio = 1.653;
預處理器”盲目地將宏名稱替換爲1.653”可能導致目標碼出現多份1.653,若改用常量,絕不會出現此種情況.
2. enum 與 #define
這個似乎不容易遇到
3. incline與#define
最典型的例子:
這樣,即獲得宏一樣的效率,又不會有副作用.
三.儘可能用const
四.確保對象被使用前已被初始化
1. 爲內置對象進行手工初始化,因爲C++不保證初始化它們.
2. 構造函數最好使用成員初值列,而不要在構造函數本體內使用賦值操作.初值列列出的成員變量,其排列次序應該和它們在class中的聲明次序相同.
3. 爲免除”跨編譯單元之初始化次序問題”,以localstatic 對象替換 non-local static 對象.