1、儘量以const和inline取代#define
1、#define是啥
1.後接一個參數,用來定義標識,表示這個標識此處被定義。常用於#ifndef、#define、#endif結構,來防止頭文件被重複包含。
#ifndef MYSTRING_H_
#define MYSTRING_H_
...
#endif
2.後接兩個參數,在預編譯期間進行文本替換。故可用於定義常量和函數,用簡潔或帶有含義的標識來代替這個常量或函數,單純地將源碼中的前者替換爲後者。儘量以const和inline來取代。#define PI 3.14
#define max(a, b) ((a) > (b) ? (a) : (b)
2、爲啥要取代#define
#define max(a, b) ((a) > (b) ? (a) : (b))
...
max(++a, ++b);
3、以const和inline取代#define
1.使用const,定義常量、常量指針(指針爲常量)、指向常量的指針(指針指向的對象爲常量)、類專屬常量等,其中,類中,定義全體對象公用的常量時,若爲整型,可在頭文件中定義:
class base
{
private:
static const int MAX_SIZE = 100;
...
public:
...
}
class base
{
private:
enum { MAX_SIZE = 100 };
...
public:
...
}
若不爲整型,則需要在頭文件中聲明,在實現文件中定義。如此,來解決#define可能帶來的問題。
2.使用inline,代替#define。它會進行類型檢查,將參數傳進函數並替換爲函數本體。如:
inline int max(int a, int b){return a > b ? a : b;}
template<typename T>
inline const T& max(const T& a, T& b){return a > b ? a : b;}
這裏,使用模板來使得max()適用於更多類型,而不僅僅是int型。
因此,使用#define時,多想想能否以const和inline取代它吧!