inlineとマクロ


短い類似関数の機能コードを記述する必要がある場合、inline関数はC++に付加された特性として、従来のCのマクロ(#define)よりも信頼性が高い(少なくともエラーを回避しやすい).
    #define SQUARE(X) X*X

マクロの動作メカニズムは「文字置換」です.
    a = SQUARE(5.0);   // a = 5.0*5.0
    b = SQUARE(4.5 + 7.5);   // b = 4.5 + 7.5 * 4.5 + 7.5
    c = SUQARE(d++);   // c = d++ * d++;

上記3つの場合、a = SQUARE(5.0);のみが従来の設計意図に合致する.「()」を追加することで、いくつかの問題を回避できます.
    #define SQUARE(X) ((X) * (X))

やはり問題があります.マクロのパラメータは「値伝達」ではないためです.c = SQUARE(d++);は依然として「d++」を2回実行するが、これは従来の想定とは異なる可能性がある.
したがって,類似関数のマクロを書く必要がある場合は,C++のinline関数の代わりに用いることが考えられる.