C++ プログラミングガイド

インライン関数の定義

インライン関数の定義を構成する方法は 2 つあります。その 1 つは定義をインライン展開するもので、もう 1 つは定義を取り込むものです。どちらの手法にも、利点と欠点があります。

定義のインライン展開

定義のインライン展開による構成は、メンバー関数にしか使用できません。インライン展開するには、クラス定義内の関数宣言の後に関数の本体を直接入れます。


class Class 
{
    int method() { return 3; }
};

この構成は、関数のプロトタイプの繰り返しを防ぎ、ソースファイルの容量を減らし、不整合が起きる可能性を減らします。しかし、この構成は、通常はインタフェースとして扱われる部分に、実装の詳細を挿入する場合があります。この場合は、関数がインライン展開でなくなったときに、大幅な編集が必要になります。

この構成は、関数の本体がごく少量である (つまり空の中括弧) であるか、あるいは関数が常にインラインである場合にのみ使用してください。

定義取り込み型の構成

定義取り込み型の構成は、すべてのインライン関数に使用できます。関数の本体を、プロトタイプの繰り返し (必要な場合) とともに入れてください。関数定義は、ソースファイル内に直接入れることも、ソースファイルとともに取り込むこともできます。


class Class {
    int method();
};
inline int Class::method() {
    return 3;
}

この構成は、インタフェースと実装が分離されます。このため関数がインラインで実装されなくなったときには、定義をヘッダーファイルからソースファイルに簡単に移動できます。欠点は、この構成ではクラスのプロトタイプが繰り返されることです。この繰り返しのため、ソースファイルの容量が増え、矛盾が発生しやすくなります。