0

重複の可能性:
関数/メソッドのキーワード「インライン」はいつ記述すればよいですか?

100% 確実ではありませんが、私が知る限り、hpp ファイルで本体を含む関数を宣言すると、インラインとしてマークされているものとして扱われます (コンパイラーが何をすべきかを決定します)。

//myfile.hpp
class StackOverflow{
public:
    void overflow(){_overflow = true;}
...
}

以下と同じです。

//myfile.hpp
class StackOverflow{
public:
    ***inline*** void overflow(){_overflow = true;}
...
}

私が間違っていれば質問は終わりですが、それ以外の場合は、必要がない場合でも関数をインラインとしてマークするのが本当に好きです.一般的なコードスタイルのガイドラインはそれについて何か言っていますか?

本当にありがとう

4

3 に答える 3

4

inlineこのコンテキストでのキーワードの言及は、まったく情報を提供しないため、省略します。それは単に視覚的な混乱です。

インラインで定義された関数を非インラインにするオプションがあった場合、これは別の問題になります (privateそのような例として -by-default を考えてください)。明示的にすると、理解しやすくなります。しかし、ここでは選択の余地はありません。何をしても、クラスの本体内で定義されたメンバー関数はinline.

実際、それを明示的にマークすることは、inline他の推測された情報を提供することに似ています。次のようには書きませんよね?

#define member
#define function

class StackOverflow{
public:
    member function inline void overflow() { _overflow = true; }
}
于 2012-10-03T09:24:32.437 に答える
2

クラス定義内で関数本体を定義すると、関数はキーワードでマークするのと暗黙的に同じになりinlineます。

コーディングスタイルの問題として、クラス内で関数本体を定義するだけでは良い習慣ではありません。

class Foo {
public:
  void method();  ← best practice: don't put the inline keyword here
  ...
};

inline void Foo::method()  ← best practice: put the inline keyword here
{ ... }

このC++FAQは、その理論的根拠を説明しています。

class Fred {
public:
  void f(int i, char c)
    {
      ...
    }
};

これはクラスを書く人にとっては簡単ですが、クラスが「何を」行うかと「どのように」行うかを混合するため、すべての読者にとっては困難です。inlineこの混合のため、通常、キーワードを使用してクラス本体の外部でメンバー関数を定義することを好みます。
これを理解する洞察:再利用指向の世界では、通常、クラスを使用する人はたくさんいますが、クラスを作成する人は1人だけです(自分で)。したがって、少数ではなく多くを支持することを行う必要があります。

于 2012-10-03T09:18:51.907 に答える
0

関数をクラス内でインラインとして宣言すると、registerキーワードと同じように、それが賢明な最適化であるかどうかをコンパイラが判断できるようになります (これは提案です)。一般に、クラス自体の内部でインラインでプログラムされたインライン関数を使用するのが経験則ですが、クラスの実装でも実行できますが、一般的ではなく、提供される唯一の利点はリンケージです。 .h/.hpp ファイルを API ヘッダーとして渡します。

于 2012-10-03T09:25:34.020 に答える